生成随机数,而不连续重复(generating random numbers without con

2019-08-18 11:00发布

怎样才能从0随机整数 - 4在不产生相同数量的连续两次这样的方式? 例如,如果图3是所产生的第一时间,然后0,1,2,4将是随机生成所述第二时间的可能的数字的数量。 如果2产生第二时间然后0,1,3,4将是随机生成的可能数目的第三次等等。

Answer 1:

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


Answer 2:

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);


Answer 3:

它可以使用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];


Answer 4:

我试过热利克的答案,它结束了生成我重复(或超出范围的数字)。 但它启发我想出了为我工作的解决方案。

我的代码是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]

所以,我最后生成+ 1和最后+ max之间的随机。 即,图7(不包括在内)之间3(含)

[3,4,5,6]

MOD任何与最大这些数字的(即5),你会得到在所需范围内的随机数:[3,4,0,1]



文章来源: generating random numbers without consecutive repetition