首页 > 解决方案 > c中的二维随机对称游走,

问题描述

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main(){
    srand((unsigned)time(NULL));
    int t=0;
    int s=0;
    int i;
    for(i=0;1;i++){
        printf("%d. (%d,%d)\n",i,t,s);
        if(t== 0 && s==0){
            system("pause");
            printf("\n");
            i=0;
        }
        int k= rand()%4;
        if(k==0)t--;
        else if(k==1)t++;
        else if(k==2)s--;
        else s++;
    }
}

我的代码在二维中生成随机对称游走。它生成一个介于 0 和 3 之间的随机整数,并以此为基础向上、向下、向左或向右移动。有一个数学定理,可以保证步行以有限步结束(到达(0,0))。

该代码有效,但是当我按下输入足够的时间时,我注意到对称行走重复。例如,首先我生成长度为 206785 的步行,然后在 5-6 次步行后,我再次生成长度为 206785 的步行。我想这是 srand() 函数的问题,但有人可以澄清问题出在哪里。

编辑:哦,是的,我在代码块上尝试这个。

标签: csrand

解决方案


问题是您的 C 库执行rand使用的伪随机数生成器的周期性很小。所有 PRNG 都具有周期性,即该序列必然会重复。使用具有较大周期性的伪随机数生成器。我可以为您搜索一个,但不想破坏乐趣:-)


推荐阅读