目标C中具有模数的随机数

时间:2010-06-24 12:06:23

标签: objective-c random modulus

我有一个非常基本的随机数函数,可以从一个范围中生成一个随机数;

即:

// The random is seeded earlier on in the applicationDidFinishLaunching() function
-(NSUInteger)makeRandomNumber:(NSUInteger)minNumber to:(NSUInteger)maxNumber
{
 //NSUInteger i = (NSUInteger)( (random() / (double)RAND_MAX) * y);

 NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 return i;
}

我想在此函数中添加可选模数运算,以便只返回某些模数的数字。

我想这样做可以为随机的人生成工资,我发现工资可以用5或0更加可读。

我不确定如何制作可选参数或强制随机化继续循环,直到找到可选的模数值。

另一个问题是,如果没有可寻找的模数,有时循环可以永远继续。

即;

0到100之间的随机化并返回模数为5的值。

编辑:这应该适用于任何范围,无论最小值或最大值是多少。以上数字只是示例。

3 个答案:

答案 0 :(得分:3)

ITYM 多个 5.对于您的示例,您只需生成0到20之间的随机值,然后将其乘以5.

答案 1 :(得分:-1)

我认为循环可以运作得很好:

 NSUInteger i = 0;
 do {
   NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 } while(i % 5 != 0);

答案 2 :(得分:-1)

整数除法将确保您的数字是roundNumber的倍数,因为它会截断除数中的小数,然后在乘法中恢复原始的舍入数。

// The random is seeded earlier on in the applicationDidFinishLaunching() function
-(NSUInteger)makeRandomNumber:(NSUInteger)minNumber to:(NSUInteger)maxNumber round:(NSUInteger) roundNumber
{   
 NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 return (i / roundNumber) * roundNumber;
}