我正在使用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的解决方案,但只能找到如何生成可被另一个显式硬编码数整除的随机数。如何调整除法功能,以使topNumber
被bottomNumber
平均除法?
答案 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
。