如何以不连续两次生成相同数字的方式生成 0 - 4 的随机整数?例如,如果 3 是第一次生成的数字,那么 0,1,2,4 将是第二次随机生成的可能数字。如果第二次生成 2,那么 0,1,3,4 将是第三次随机生成的可能数字,依此类推。
问问题
2396 次
4 回答
7
int oldrand = <prior random number>;
int adder = randomNumberGenerator() % 4;
int newrand = (oldrand + adder + 1) % 5;
于 2013-03-31T21:06:04.820 回答
1
uint32_t myRandomNumber(uint32_t upperBound, uint32_t avoid) {
if (avoid < upperBound) {
--upperBound;
}
uint32_t number = arc4random_uniform(upperBound);
if (number >= avoid) {
++number;
}
return number;
}
第一次这样称呼它:
uint32_t number = myRandomNumber(5, 5);
第一次之后这样称呼它:
number = myRandomNumber(5, number);
于 2013-03-31T21:17:03.620 回答
0
它可以使用 2 个数组生成;1是排序的,另一个是通过采用随机对象形式创建的,如下所示
-(NSMutableArray *)generateRandomNumbersFrom:(int) a to:(int)b
{
NSMutableArray * numbersWillBeChosen=[NSMutableArray new];
NSMutableArray * randomList=[NSMutableArray new];
//add the numbers that will create your ramdom list in order
for(int k=0;k<=(b-a);k++)
{
[numbersWillBeChosen addObject:@(a+k)];
}
//create random list
for (int p=(b-a)+1; p>0; p--) {
int rand= arc4random()%p;
[randomList addObject:[numbersWillBeChosen objectAtIndex:rand]];
[numbersWillBeChosen removeObjectAtIndex:rand];
}
NSLog(@"%@",randomList);
return randomList;
}
你可以打电话询问你的情况
randList=[self generateRandomNumbersFrom:0 to:4];
于 2013-03-31T22:04:03.613 回答
0
我尝试了 Hot Lick 的答案,它最终为我生成了重复项(或超出范围的数字)。但它启发了我想出一个对我有用的解决方案。
我的代码是 C#,但您可以修改它以满足您的需要。
//Returns a random number not same as previous random number. ie. no 2 consec random
public static int NonConsecRandom(int max, int? lastNum=null)
{
if (lastNum == null)
return Random.Range(0, max);
int last = (int)lastNum;
return Random.Range(last + 1, last + max) % max;
}
解释:
如果先前没有生成数字,则第一个块仅返回一个随机数。
第二部分从“其他数字”生成一个随机数。
例如,如果我的“最大值”为 5,则可能的随机数为:0、1、2、3、4
假设我的最后一个数字是 2,现在我想要 [3, 4, 0, 1] 之间的随机数
所以我在last+1和last+max之间生成一个随机数。即在3(含)和7(不含)之间
[3、4、5、6]
用最大值(即 5)修改这些数字中的任何一个,您将获得所需范围内的随机数: [3 , 4, 0, 1]
于 2017-01-09T05:24:01.200 回答