【问题标题】:Generate a division which result hasn't dot and divisor and dividend are generated random from a range of numbers生成一个结果没有点的除法,除数和被除数是从一系列数字中随机生成的
【发布时间】:2017-06-29 04:22:26
【问题描述】:

我的问题主要是数学逻辑问题,而不是代码问题。

我有一个 android 应用程序,我可以在其中生成一个部门。

我必须生成一个除数,除数和被除数是从特定数字范围(比如 10-1000)中随机生成的,结果是一个没有点的数字。

例如:

A(10-1000) : B (10-1000) = C(无点数)

有谁知道如何达到我的目标。数学不是我的朋友。

谢谢

【问题讨论】:

  • 当你说一个没有点的数字时,你的意思是一个整数吗?例如,3 而不是 3.14?
  • 是的,结果必须是正整数

标签: java android math random


【解决方案1】:

如果您希望除法的结果是整数,那么您需要从乘法开始。如果 A / B = C,则 A = B * C。首先选择两个随机整数(“无点”)B 和 C。通过将 then 相乘找到 A。问“什么是 A/B?”答案将是整数 C。

一些伪代码:

B <- 10 + rand(991)  // B in [10..1000]
C <- 10 + rand(991)  // C in [10..1000]
A <- B * C
display("What is " + A + " / " + B + "?")
read(answer)
if (answer == C)
  display ("Correct.  Well done.")
else
  display("Wrong answer.  The correct answer was " + C)
end if

【讨论】:

  • 问题是A必须是10到1000之间的数字
  • 然后反复挑选 BC 对,直到 A 在正确的范围内。 B 和 C 可以在 [2..500] 范围内,以减少未命中的次数。
【解决方案2】:

这里的“数学”逻辑(示例值):

if((2 % 2.5) > 0) 也就是检查 2 是否能被 2.5 整除

只要上面的例子是假的,随机生成的值就不会返回一个整数或“一个没有点的数字”。

Random random = new Random();

    int lowerbound = 10;


    long counter = 0;

    while(true){

        double a = random.nextInt(10000-lowerbound)+lowerbound+1;//a number between 10 and 10000
        double b = random.nextInt(10000-lowerbound)+lowerbound+1;//a number between 10 and 10000

        double result = (a/b);

        if( (result % Math.round(result)) == 0){

            System.out.println(a + "/" + b + "=" + result);

            int ires = (int) Math.round(result);

            System.out.println(ires);
            break;
        }

        counter++;
    }

【讨论】:

    猜你喜欢
    • 2014-03-26
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多