【问题标题】:Seeing the next four numbers in a random sequence (using srand and rand)以随机序列查看接下来的四个数字(使用 srand 和 rand)
【发布时间】:2014-04-12 17:19:41
【问题描述】:

我使用 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) 会让我回到 first 数字,所以我可以轻松地看到序列中的前四个数字而不会破坏任何东西,但是如果我想看到数字 x -> x + 4,那就搞砸了。

【问题讨论】:

标签: c random srand


【解决方案1】:

我想我可以只调用 srand(SEED),然后调用 rand() 适当的次数以回到我原来的位置。这有点混乱和低效,但它确实有效。考虑到这是一款 SIMON 游戏,大多数时候我必须连续调用 rand() 才能回到玩家所处的位置,反正 30 左右。

【讨论】:

    【解决方案2】:

    使用这样的东西:

    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()。然后在初始化,srand() 之后做:

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

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

    【讨论】:

    • 谢谢,这应该比我想出的凌乱的解决方案要好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2014-05-01
    相关资源
    最近更新 更多