如何生成可被另一个随机生成的数平均除的随机数

时间:2018-12-30 15:25:27

标签: javascript jquery html function random

我正在使用JavaScript和jQuery开发一个简单的数学抽认卡应用程序。可用的操作是加,减,乘和除,每个操作都具有使用generateTop()generateBottom()为HTML元素分配值的函数。

我在弄清楚如何使用除法问题函数生成随机数时遇到麻烦,因此topNumber可以被bottomNumber整除。我正在使用以下代码为每个问题生成随机数:

let topNumber = 0;
let bottomNumber = 0;

function generateTop(max, min){
  topNumber = Math.floor(Math.random() * (max - min) + min);
  return topNumber;
};

function generateBottom(max, min){
  bottomNumber = Math.floor(Math.random() * (max - min) + min);
  return bottomNumber;
};

这是我当前的部门问题生成器:

function division(){
  problemTop.html(generateTop(1, 144));
  problemBottom.html(generateBottom(1, topNumber));
  opSym.html("÷");
}

我可以调整max和min以获得正整数,以解决加法,减法和乘法问题,但始终坚持如何确保我获得正整数以解决除法问题。我尝试弄乱了一些不同的循环想法,但没有任何工作。我想将最小值保持在1,将最大值保持在144。

我已经检查了SO的解决方案,但只能找到如何生成可被另一个显式硬编码数整除的随机数。如何调整除法功能,以使topNumberbottomNumber平均除法?

3 个答案:

答案 0 :(得分:1)

denomenator函数中添加一个generateTop参数,并传入从generateBottom返回的随机生成的“底”(分母)数字。将在generateTop中创建的新随机数乘以分母,然后将其返回。

答案 1 :(得分:0)

您可以这样做:

var a = Math.floor(Math.random() * 10) 
var b = a * Math.floor(Math.random() * 10) 
var c = b/a;

document.write(b + " is divisible by " + a + " ( *" + c + ")" )

在* b中,b总是可被a整除。

let topNumber = 0;
let bottomNumber = 0;

function generateTop(max, min, a){
  
  topNumber = a * Math.floor(Math.random() * (max - min) + min);
  return topNumber + " is divisible by " + a + " ( *" + topNumber/a + ")";
  
};

function generateBottom(max, min){
  
  bottomNumber = Math.floor(Math.random() * (max - min) + min);
  return bottomNumber;
  
};

document.write(generateTop(10, 1, generateBottom(10, 1)))

答案 2 :(得分:0)

只需添加一个if语句即可使您的函数递归:

function generateBottom(max, min) {
    bottomNumber = Math.floor(Math.random() * (max - min) + min);
    if (topNumber % bottomNumber) {
        generateBottom(max, min);
    }
    return bottomNumber;
}

它的作用是将topNumber分开并检查是否存在余数。如果有余数,则表示两者不相除,因此需要重新计算。否则,它会照常返回bottomNumber