dearMakiseKurisu 2019-09-28 09:17 采纳率: 100%
浏览 231
已采纳

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; //结束循环
}
}
}

  • 写回答

1条回答 默认 最新

  • 提及 2019-09-28 09:43
    关注

    通常来说只需一次 srand 调用

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化