我的任务是为C++类创建一个非常简单的随机游走程序。我写了它,并相当肯定一切都是正确的,但我得到了这个奇怪的错误。从0到10,这些步骤排列成一条直线,尽管坐标显示它采取的是左右交替的步数。
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int steps,i,pos=10;
srand(13699);
cout << "Please enter the amount of steps to be taken: ";
cin >> steps;
cout << endl;
for (i=0;i<=steps;i++)
{
if (rand()%2)
pos+=1;
else
pos-=1;
cout << i << ": " << pos-10 << ": " << setw(pos) << "*" << endl;
}
} // main很明显这里有某种模式,但对于我的生活,我无法弄清楚.这是一个链接到一个屏幕截图的输出,如果它有帮助。http://i.stack.imgur.com/USx4U.png感谢你们能给予的任何帮助!
发布于 2014-03-18 19:19:08
答案不是在代码中,而是在对输出的解释中。
当pos-10小于0时,您打印此值的区域就会更长(因为有负号),那么您的“walker”在输出中的位置就会右移。
同样的原因,当它从9到10,它是不正确的。
想想这意味着左边的结肠不是直线。
发布于 2014-03-18 19:28:42
在1到10之间为i“排队”是有意义的。
以前两行为例:
i == 1时,您有pos == 10,*在:之后打印10个空格。i == 2时,您有pos == 9,*在:之后打印9个空格。但是,由于您在第一行中打印0 (一个字符),在第二行中打印-1 (两个字符),因此*将在每一行中的相同位置结束。
顺便说一句,每次运行程序时,您都使用相同的值(13699)来播种RNG。
尝试使用一个更“随机”的值,例如,基于时间的值:
srand((unsigned int)time(NULL));您需要在源文件中使用#include <time.h>。
https://stackoverflow.com/questions/22488691
复制相似问题