簡體   English   中英

如何生成一個可以被另一個隨機生成的數整除的隨機數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM