[英]How to generate a random number that is evenly divisible by another randomly generated number
我正在使用 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("÷");
}
我可以調整最大值和最小值以獲得加法、減法和乘法問題的正整數,但我堅持如何確保我獲得除法問題的正整數。 我試過弄亂一些不同的循環想法,但沒有任何工作。 我想保持最小值為 1,最大值為 144。
我已經檢查了 SO 的解決方案,但只能找到如何生成可被另一個明確的硬編碼數字整除的隨機數。 如何調整我的除法函數,以便topNumber
可以被topNumber
平均bottomNumber
?
向generateTop
函數添加一個denomenator
參數,並傳入從generateBottom
返回的隨機生成的“底部”(分母)數字。 將在generateTop
創建的新隨機數乘以分母,然后返回。
你可以這樣做:
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 + ")" )
在 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)))
只需添加一個 if 語句即可使您的函數遞歸:
function generateBottom(max, min) {
bottomNumber = Math.floor(Math.random() * (max - min) + min);
if (topNumber % bottomNumber) {
generateBottom(max, min);
}
return bottomNumber;
}
它的作用是除以topNumber
並檢查余數是否存在。 如果有余數,則表示兩者沒有相除,因此重新計算。 否則,它bottomNumber
像往常一樣返回bottomNumber
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.