C++新手上路,编写的代码不能如预想帮运行,是随机数生成出错还是算法出错?

该题目中我编写的代码运行后前几个结果随机,后面的结果全部相同,是随机数的生成出错了吗?
同时我的同学编写的程序结果在160左右,而我的总是1000000+,为什么?是数学逻辑错了吗?
还有重复的结果总是1或者15,为什么?
#include
#include
#include
#include
using namespace std;
int main()
{
/*题目,在一个16*16的坐标中A,B两点同时出发,
每一次移动只能平移一个单位向量,单A,B相遇时
结束,输出移动的步数。并重复上述操作10000次,
计算平均步数。*/
cout << "测试开始" << endl;
int x, y, n, m,i,z;
float Z = 0;
x = y = 15;
z = 0;
i = 0;
n = m = 0;
while (true)
{
srand((unsigned)time(NULL));
switch (rand() % 4 + 1)
{
case 1:y = (y + 17) % 16;break;//(x,y)上移
case 2:x = (x + 17) % 16;break;//(x,y)右移
case 3:y = (y + 15) % 16;break;//(x,y)下移
case 4:x = (x + 15) % 16;;break;//(x,y)左移
}
switch (rand() % 4 + 1)
{
case 1:m = (m + 17) % 16;break;//(n,m)上移
case 2:n = (n + 17) % 16;break;//(n,m)右移
case 3:m = (m + 15) % 16;;break;//(n,m)下移
case 4:n = (n + 15) % 16;;break;//(n,m)左移
}
i = i + 1; //计算移动步数
if (x == n && y == m) //相遇
{
cout << i << " ";//输出步数
z++; //计算运行次数
Z = Z + i; //计算总步数
i = 0; //重启
x = y = 15; //重启
n = m = 0; //重启
}
if (z == 10000) //计算平均值
{
cout << "平均值为" << Z / z << endl;
break; //结束循环
}
}
}

c++

1个回答

通常来说只需一次 srand 调用

cpu 速度很块,while 中的 time 在一定时间内返回一样的值,所以rand 返回一样的值列表

如果使用 srand (1), 每次程序运行 rand 的返回结果和上次运行的一样,只要保证 srand 的值不同就可以了

u011091701
提及 回复dearMakiseKurisu: 只需一次 srand 调用
大约 2 个月之前 回复
dearMakiseKurisu
dearMakiseKurisu 能给个例子么,比如帮我修改一下
大约 2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!