如何获得两个彼此可整的随机数?

时间:2018-08-12 05:00:26

标签: javascript

我正在生成2个随机数:

1)第一个数字必须是1到30之间的任意数字

2)第二个数字必须是1到10之间的任意数字

我只是想将第一个数字除以第二个数字,反之亦然,最后,警告结果。我的问题是如何获得2个随机数除法的结果?谁能指出我正确的方向?提前谢谢!!

注意:第一个数字必须可被第二个数字整除。

这是我的代码:

var arr = [];
for (var i = 0; i < 2; i++) {
    do {
    var firstRandomNumber = Math.floor(Math.random()*30) + 1;
    var secondRandomNumber = Math.floor(Math.random()*10) + 1;
    if(firstRandomNumber % secondRandomNumber === 0){
        correctResult = result;
        arr.push(correctResult);
    }
    } while ((firstRandomNumber % secondRandomNumber === 0));
  }
  console.log(arr);

5 个答案:

答案 0 :(得分:2)

我建议使用一种更实用的方法:创建一个函数,该函数创建两个随机数,如果一个可以被另一个整除,则将其返回。然后,只需调用该函数,直到得到真实结果:

function tryGetDivisible() {
  var firstRandomNumber = Math.floor(Math.random() * 30) + 1;
  var secondRandomNumber = Math.floor(Math.random() * 10) + 1;
  if (firstRandomNumber % secondRandomNumber === 0) {
    console.log(firstRandomNumber, secondRandomNumber);
    return firstRandomNumber / secondRandomNumber;
  }
}

let result;
while (!result) result = tryGetDivisible();
const arr = [result];
console.log(arr);

答案 1 :(得分:1)

几件事:

  • 您的while循环应该一直循环到firstRandomNumber % secondRandomNumber === 0,因此您要在不正确的情况下继续循环。
  • result没有设置任何位置,因此我将结果添加到了数组中
  • if(firstRandomNumber % secondRandomNumber === 0){是多余的。当do / while循环完成时,它将具有匹配的do编号。只需将arr.push()移到该循环之外即可。

var arr = [];
for (var i = 0; i < 2; i++) {
  do {
    var firstRandomNumber = Math.floor(Math.random()*30) + 1;
    var secondRandomNumber = Math.floor(Math.random()*10) + 1;
  } while ((firstRandomNumber % secondRandomNumber !== 0));

  console.log('first', firstRandomNumber, 'second', secondRandomNumber);
  arr.push(firstRandomNumber / secondRandomNumber);
}
console.log(arr);

答案 2 :(得分:0)

一种更简单的方法是获取第一个随机数,然后尝试获取第二个随机数,直到它们被整除。所以这是代码:

    var firstRandomNumber = Math.floor(Math.random()*30) + 1;
    while (firstRandomNumber % secondRandomNumber !== 0) {
        var secondRandomNumber = Math.floor(Math.random()*10) + 1;
    }
  console.log(firstRandomNumber + "," + secondRandomNumber);

答案 3 :(得分:0)

由于第一个必须可被第二个整除,所以我的方法是:

  1. 生成第二个数字。
  2. 确定第二个数字的最大倍数不超过30(例如Math.floor(30/firstNumber))。
  3. 随机选择一个倍数并将其用作第一个数字。您只需要选择一个介于1和允许的最大乘数之间的随机数即可。

这样,就不需要进行生成和测试循环,而在生成成功的配对之前,该循环可以无限制地进行。

答案 4 :(得分:0)

如果要避免while循环,可以选择第一个数字,然后将可能的第二个数字组合在一个数组中。然后随机选择其中之一:

let first = Math.floor(Math.random() * 10) + 1

// all possible divisible numbers
let factors = Array.from({length: 30}, (_, i) => i + 1)
    .filter(i => first % i === 0 || i % first === 0)

//pick one
let second = factors[Math.floor(Math.random() * factors.length)]

console.log(first, second)