以随机顺序查看接下来的四个数字(使用srand和rand)

时间:2014-03-09 18:12:15

标签: c random srand

我使用srand(SEED)对随机数生成器进行一次播种,其中SEED只是按下按钮多长时间生成的16位数。我的随机数生成器工作正常,但我需要能够提前查看序列中的下四个数字,如果有意义的话,不会破坏任何内容。

所以,我按顺序得到序列中的下一个数字:

num = rand() % 4;

这给了我一个0到3之间的随机数,这很好。让我们说前6个数字是0 3 2 1 2 3,我刚刚生成了该序列中的前3个数字。接下来的四个数字是2,1,2,3。我希望能够获得这些数字并显示它们,但是再次调用rand()会破坏原始序列(顺便说一下,这是SIMON游戏。一种作弊模式可以查看下一步要按的内容)。

调用srand(SEED)会将我带回第一个号码,因此我可以很容易地看到序列中的前四个数字而不会中断任何内容,但如果我想查看数字x - &gt ; x + 4,然后就会搞砸了。

2 个答案:

答案 0 :(得分:1)

使用类似的东西:

int nextfourrand[4];

int
myrand (void);
{
    int i;
    int r = nextfourrand[0];
    for (i = 0; i<=2; i++)
        nextfourrand[i] = nextfourrand[i+1];
    nextfourrand[3] = rand();
    return r;
}

并使用此而不是rand()。然后在init上,在srand()之后执行:

int i;
for (i = 0; i<=3; i++)
    nextfourrand[i] = rand();

接下来的四个随机数位于nextfourrand数组中。

答案 1 :(得分:0)

我想我可以调用srand(SEED),然后调用rand()适当的次数以回到原来的位置。它有点混乱和低效,但绝对有效。考虑到这是一款SIMON游戏,大多数情况下我必须连续调用rand()才能回到玩家所在的位置,不管怎么说都是30左右。