我正在嘗試撰寫(JavaScript 或 VB.NET)演算法來生成 x 個亂數。每個亂數必須在一定范圍內,并且所有數字的總和必須等于一個常數。我并不特別需要確切的代碼(如果需要,我可以隨時詢問何時開始除錯),而只需要整個事情背后的邏輯。
在我的特殊情況下:我需要生成 4 個亂數,每個在 0 到 10 之間,隨機生成的數字的總和需要為 24。
如果您需要更多資訊:請詢問。提前感謝您嘗試與我一起解決這個問題??。
編輯:我應該已經添加了我已經嘗試過的內容(代碼在 VB.NET 中,但并不那么難......)基于這個StackOverflow 答案,這是我已經嘗試過的(雖然它不起作用):
Dim intAverageNumberMark As Integer = 24 / 4
Dim intOverMark As Integer = 0
Dim intGeneratedRandomNumber As Integer = 0
Dim intCurrentSumOfRandomNumbers = 0
For intCounter = 0 To intNumberOfTowers - 1
intGeneratedRandomNumber = RandomNumber(0 intGeneratedRandomNumber, 10)
intOverMark = If(intGeneratedRandomNumber > intAverageNumberMark, intGeneratedRandomNumber - intAverageNumberMark, 0)
If intCounter = intNumberOfTowers - 1 Then
intNumbers(intCounter) = 24 - intCurrentSumOfRandomNumbers
End If
intNumbers(intCounter) = intGeneratedRandomNumber
intCurrentSumOfRandomNumbers = intGeneratedRandomNumber
Debug.Print(intGeneratedRandomNumber)
Next
intNumbers()是一個用 宣告的陣列Dim intNumbers(7) As Integer。
uj5u.com熱心網友回復:
sum = 0;
loop
generate new number
if sum new number <= constant{
sum = new number
break out of loop
}
uj5u.com熱心網友回復:
最簡單的方法是采用 brte force 方法并生成所有可能的組合并隨機選擇此結果集。
function generate(from, to, size, sum) {
function iter(right, delta) {
if (delta < 0) return;
if (!delta && right.length === size) return result.push(right);
if (!delta || right.length === size) return;
for (let i = from; i <= Math.min(delta, to); i )
iter([...right, i], delta - i);
}
const result = [];
iter([], sum);
return result;
}
const
result = generate(0, 10, 4, 24);
console.log(result.length);
document.getElementById('out').innerHTML = result.map(a => a.map(v => v.toString().padStart(2, ' ')).join(' ')).join('\n');
<pre id="out"></pre>
uj5u.com熱心網友回復:
如果您要尋找的只是演算法,那么我將采用以下方法:
- 從您的目標總“C”開始
- 在您想要的范圍內生成一個亂數“r”。
- 檢查是否 r > C,如果是,則將 r 減少到 C
- 從 C 中減去 r(在回圈外更新 C)
- 如果 C != 0 從 1 開始重復
我覺得我應該指出的一件事是,隨著 C 接近 0,數字將變得越來越非隨機 - 發生這種情況的速度取決于與 C 相比的亂數上限和下限。
您還可以找出有關此演算法的一些額外資料點,例如回圈運行了多少次(您生成了多少個數字)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/435875.html
標籤:javascript VB.net 数学
下一篇:C 比較Vector3
