2016-07-27 23 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

相关问题