[英]How to generate a random number that is evenly divisible by another randomly generated number
I'm working on a simple math flashcards app using JavaScript and jQuery.我正在使用 JavaScript 和 jQuery 开发一个简单的数学抽认卡应用程序。 The available operations are addition, subtraction, multiplication, and division, each of which have functions that use
generateTop()
and generateBottom()
to assign values to HTML elements.可用的运算有加法、减法、乘法和除法,每个运算都有使用
generateTop()
和generateBottom()
为 HTML 元素赋值的函数。
I'm having trouble figuring out how to use my division problem function to generate random numbers so that the topNumber
is evenly divisible by the bottomNumber
.我无法弄清楚如何使用我的除法问题函数来生成随机数,以便
topNumber
可以被bottomNumber
整除。 I'm using the following code to generate random numbers for each problem:我正在使用以下代码为每个问题生成随机数:
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;
};
Here is my current division problem generator:这是我目前的除法问题生成器:
function division(){
problemTop.html(generateTop(1, 144));
problemBottom.html(generateBottom(1, topNumber));
opSym.html("÷");
}
I can adjust the max and min to get a positive integer for addition, subtraction, and multiplication problems but am stuck on how to ensure that I get a positive integer for division problems.我可以调整最大值和最小值以获得加法、减法和乘法问题的正整数,但我坚持如何确保我获得除法问题的正整数。 I've tried messing with some different loop ideas but haven't gotten anything to work.
我试过弄乱一些不同的循环想法,但没有任何工作。 I want to keep min at 1 and max at 144.
我想保持最小值为 1,最大值为 144。
I've checked SO for solutions but can only find how to generate random numbers divisible by one other explicit, hard-coded number.我已经检查了 SO 的解决方案,但只能找到如何生成可被另一个明确的硬编码数字整除的随机数。 How can I adjust my division function so that the
topNumber
can be divided evenly by the bottomNumber
?如何调整我的除法函数,以便
topNumber
可以被topNumber
平均bottomNumber
?
Add a denomenator
parameter to your generateTop
function, and pass in the randomly generated "bottom" (denominator) number returned from generateBottom
.向
generateTop
函数添加一个denomenator
参数,并传入从generateBottom
返回的随机生成的“底部”(分母)数字。 Multiply the new random number created in generateTop
by the denominator, and return that.将在
generateTop
创建的新随机数乘以分母,然后返回。
You can do like this :你可以这样做:
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 + ")" )
In a * b, b is always divisible by a.在 a * 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)))
Just add a single if statement to make your function recursive:只需添加一个 if 语句即可使您的函数递归:
function generateBottom(max, min) {
bottomNumber = Math.floor(Math.random() * (max - min) + min);
if (topNumber % bottomNumber) {
generateBottom(max, min);
}
return bottomNumber;
}
What this does is it divides topNumber
and checks if a remainder exists.它的作用是除以
topNumber
并检查余数是否存在。 If there is a remainder, it means the two do not divide, so it is recalculated.如果有余数,则表示两者没有相除,因此重新计算。 Otherwise, it returns
bottomNumber
as per usual.否则,它
bottomNumber
像往常一样返回bottomNumber
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.