c - 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() 函数的问题,但有人可以澄清问题出在哪里。
编辑:哦,是的,我在代码块上尝试这个。
解决方案
问题是您的 C 库执行rand使用的伪随机数生成器的周期性很小。所有 PRNG 都具有周期性,即该序列必然会重复。使用具有较大周期性的伪随机数生成器。我可以为您搜索一个,但不想破坏乐趣:-)
推荐阅读
- fonts - How do I make single, curved characters?
- python - 使用pandas解析csv,结果错误。熊猫版本是 0.24.2
- javascript - 将侦听器变量重新分配给 onSnapshot 引发错误
- aws-codebuild - AWS 代码构建 - 缓存的 DOWNLOAD_SOURCE 耗时太长
- scripting - 寻找从新闻文章中收集句子的程序/脚本
- laravel - 基于角色实现基于行的访问
- c++ - 特征错误:INVALID_MATRIX_PRODUCT 将向量和矩阵相乘
- javascript - I can not get text value in a div by using val() or innerHTML or
- css - maven 在构建期间从 CSS 文件中删除 CSS 属性
- sql - SQL Server 查询以查找特定列的每个 ID 不包含所有前面的数字的位置