生成随机数而不连续重复

时间:2013-03-31 20:49:50

标签: objective-c random

如何从0到4生成随机整数,使得连续两次生成相同的数字?例如,如果3是第一次生成的数字,则0,1,2,4将是第二次随机生成的可能数字。如果第二次产生2,那么0,1,3,4将是第三次随机产生的可能数字,依此类推。

4 个答案:

答案 0 :(得分:6)

int oldrand = <prior random number>;
int adder = randomNumberGenerator() % 4;
int newrand = (oldrand + adder + 1) % 5;

答案 1 :(得分: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);

答案 2 :(得分: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];

答案 3 :(得分: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;
}

<强>解释

如果之前没有生成数字,则第一个块只返回一个随机数。

第二部分从&#34;其他数字&#34;生成一个随机数。

例如,如果我的&#34; max&#34;是5,可能的随机数是: 0,1,2,3,4

让我说我的最后一个数字是2,现在我想要一个[3,4,0,1]中的随机数

所以我在last + 1和last + max之间生成一个随机数。 即3(包括)和7(不包括)

[3,4,5,6]

使用max(即5)修改任何这些数字,并且您将获得所需范围内的随机数:[3,4,0,1]