繁体   English   中英

如何从随机数数学测验中排除素数?

[英]how to exclude prime number from random number math quiz?

我在数学测验中试过这个,效果很好,但我没有得到小数部分:

public void gameContinue() {
  int num1 = (int) (Math.random() * 100 + 1);
  java.util.List<Integer> firstNumDivisors = getDivisors(num1);

  int divisorsRandIndex = (int) (Math.random() * firstNumDivisors.size());
  int num2 = firstNumDivisors.get(divisorsRandIndex);

  question.setText(num1 + " ÷ " + num2);
  
  // Create your question from first and second numbers here
}

private static java.util.List<Integer> getDivisors (int number) {
  java.util.List<Integer> divisors = new java.util.ArrayList<>();

  for (int i = 1; i <= number; i++)
    if (number % i == 0)
      divisors.add(i);
  return divisors;
}

但经过一些测试,我不想包括素数(超过 10,如 11、13、17、19 等),我也不希望答案超过 10(11、12、13 等上)

我应该为素数创建一个字符串并让程序排除这些吗? 另外,我怎样才能使答案不超过10?

谢谢

(您的问题的某些要点需要一些解释 - 希望我是正确的;否则,只需添加评论,我会尝试适应。)

要求答案总是 <= 10

为确保所选除数不会导致“答案”超过 10,然后简单地限制添加到除数列表中的除数。

修改getDivisors中的一行,如下所示:

// i is an integral divisor and the resulting quotient is <= 10
if (number % i == 0 && number / i <= 10)

然后当代码从列表中随机选择一个除数时,问题的“答案”:

数字 1 ÷ 数字 2

将始终 <= 10,其中 num1 是从 1 到 100(含)的数字,num2 是随机选择的整数除数。

排除一些股息( num1

为了从范围中排除某些数字(对于您的num1 ),您可以将其作为循环来执行,如here

或者您可以创建一个可接受数字的列表,然后使用Random为您的可接受列表提供一个索引(用于创建列表的信用参考答案)

// an array of acceptable numbers as dividend
int[] acceptableNums = IntStream.range(1, 101).filter(a -> !java.util.List.of(11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97).contains(a)).toArray();

// here i chose to use "r" which is java.util.Random r = new java.util.Random() because my test involved a loop and I want to get uniform distribution over the loop.
int num1 = acceptableNums[r.nextInt(acceptableNums.length)];

所以完整的测试:

public static void main(String[] args) {
    
    java.util.Random r = new java.util.Random();

    int[] acceptableNums = IntStream.range(1, 101).filter(a -> !java.util.List.of(11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97).contains(a)).toArray();

    for (int i = 0; i < 100; i++) {

        int num1 = acceptableNums[r.nextInt(acceptableNums.length)];
        java.util.List<Integer> firstNumDivisors = getDivisors(num1);

        int divisorsRandIndex = (int) (Math.random() * firstNumDivisors.size());
        int num2 = firstNumDivisors.get(divisorsRandIndex);


        System.out.println("What is " + num1 + " ÷ " + num2+ " (Answer: "+num1/num2+")");
        // Create your question from first and second numbers here
        
    }
}

    private static java.util.List<Integer> getDivisors ( int number){
        java.util.List<Integer> divisors = new java.util.ArrayList<>();

        for (int i = 1; i <= number; i++)
            if (number % i == 0 && number / i <= 10)
                divisors.add(i);

        return divisors;
    }    

和 output:

What is 78 ÷ 39 (Answer: 2)
What is 1 ÷ 1 (Answer: 1)
What is 32 ÷ 8 (Answer: 4)
What is 68 ÷ 17 (Answer: 4)
What is 26 ÷ 13 (Answer: 2)
What is 94 ÷ 47 (Answer: 2)
What is 46 ÷ 23 (Answer: 2)
What is 68 ÷ 68 (Answer: 1)
What is 10 ÷ 2 (Answer: 5)
What is 70 ÷ 10 (Answer: 7)
What is 38 ÷ 38 (Answer: 1)
What is 75 ÷ 75 (Answer: 1)
What is 1 ÷ 1 (Answer: 1)
What is 90 ÷ 30 (Answer: 3)
What is 62 ÷ 62 (Answer: 1)
What is 95 ÷ 95 (Answer: 1)
What is 60 ÷ 6 (Answer: 10)
What is 27 ÷ 3 (Answer: 9)
What is 5 ÷ 1 (Answer: 5)
What is 28 ÷ 14 (Answer: 2)
What is 1 ÷ 1 (Answer: 1)
What is 70 ÷ 14 (Answer: 5)
What is 21 ÷ 21 (Answer: 1)
What is 40 ÷ 40 (Answer: 1)
What is 51 ÷ 17 (Answer: 3)
What is 24 ÷ 12 (Answer: 2)
What is 5 ÷ 1 (Answer: 5)
What is 58 ÷ 58 (Answer: 1)
What is 91 ÷ 91 (Answer: 1)
What is 91 ÷ 13 (Answer: 7)
What is 94 ÷ 94 (Answer: 1)
What is 28 ÷ 14 (Answer: 2)
What is 46 ÷ 23 (Answer: 2)
What is 95 ÷ 95 (Answer: 1)
What is 58 ÷ 58 (Answer: 1)
What is 2 ÷ 2 (Answer: 1)
What is 55 ÷ 55 (Answer: 1)
What is 20 ÷ 5 (Answer: 4)
What is 92 ÷ 23 (Answer: 4)
What is 21 ÷ 21 (Answer: 1)
What is 10 ÷ 5 (Answer: 2)
What is 1 ÷ 1 (Answer: 1)
What is 69 ÷ 69 (Answer: 1)
What is 84 ÷ 21 (Answer: 4)
What is 96 ÷ 24 (Answer: 4)
What is 90 ÷ 45 (Answer: 2)
What is 88 ÷ 44 (Answer: 2)
What is 88 ÷ 22 (Answer: 4)
What is 72 ÷ 36 (Answer: 2)
What is 40 ÷ 5 (Answer: 8)
What is 8 ÷ 4 (Answer: 2)
What is 10 ÷ 2 (Answer: 5)
What is 24 ÷ 3 (Answer: 8)
What is 66 ÷ 66 (Answer: 1)
What is 90 ÷ 30 (Answer: 3)
What is 66 ÷ 66 (Answer: 1)
What is 58 ÷ 58 (Answer: 1)
What is 91 ÷ 91 (Answer: 1)
What is 58 ÷ 58 (Answer: 1)
What is 28 ÷ 7 (Answer: 4)
What is 96 ÷ 16 (Answer: 6)
What is 90 ÷ 30 (Answer: 3)
What is 91 ÷ 91 (Answer: 1)
What is 12 ÷ 4 (Answer: 3)
What is 4 ÷ 4 (Answer: 1)
What is 84 ÷ 84 (Answer: 1)
What is 8 ÷ 1 (Answer: 8)
What is 49 ÷ 7 (Answer: 7)
What is 14 ÷ 7 (Answer: 2)
What is 16 ÷ 8 (Answer: 2)
What is 51 ÷ 17 (Answer: 3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM