簡體   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