2016-07-27 24 views
3

我想獲得4個不同的隨機數及其總必須是100(RN1 + RN2 + RN3 + RN4 = 100)如何生成4個隨機數,這4個和必須是100

+0

提示:僅生成從0-100 3張的隨機數,如果總3更比100,再次生成,第4個是100減去其他3:D我想聽到更好的主意,我想 – Tj3n

+1

選中此鏈接(http://math.stackexchange.com/questions/1276206/method-of-生成隨機數,即總和爲100是這個真正的隨機)。它可以幫助你找到一個合適的算法。 – Saraswati

回答

10

就這樣的區別:

NSInteger r1, r2, r3, r4; 
r1 = arc4random_uniform(96); 
r2 = arc4random_uniform(97-r1); 
r3 = arc4random_uniform(98-r1-r2); 
r4 = 100-r1-r2-r3; 
+0

給出了一些時間0,但是,所有數字都必須大於0,並且總數是99,但是我想一定是100 – blkerai

+0

我已經更新我的答案 – zylenv

+0

感謝它正在爲我工​​作 – blkerai

0

我認爲,這是最簡單的方法來做到這一點:

1.生成1之間3個隨機數到100

2.計算總和

3.並生成4號 - 添加計算的總和100

+0

如果前三個數字的總和是115,該怎麼辦? –

+0

再次生成...意味着檢查天氣總和小於100,如果不再生成它。或者我們可以很好地取負值 –

+0

在重複的情況下,執行可能需要很長時間,但是如果我們接受否定數字,那麼它很好。但接受的答案是有一個偉大的邏輯。但感謝您的建議和嘗試.... –

0
BOOL flag = false; 
    int r,r1,r2,r3; 
    while (!flag) { 
     r = arc4random_uniform(100); 
     r1 = arc4random_uniform(100); 
     r2 = arc4random_uniform(100); 
     r3 = arc4random_uniform(100); 
     if (r+r1+r2+r3 == 100) { 
      flag = true; 
     } 

    } 
    NSLog(@"%d %d %d %d",r,r1,r2,r3); 
+0

它將需要太長的時間來執行.... –

+0

可能是卡住在一個無限循環的可能性那麼...... –

+1

這個發生的機會很少,並且使得CPU必須產生太多次,完全沒有效率的 – Tj3n

相關問題