我目前正在处理的代码是随机漫步者。代码表示一个人在任意方向(向上,向下,向左,向右)上迈出一步,然后分别打印出新位置。在开始时,提示用户输入任何数量的步骤或循环应迭代的次数。代码的目标是计算(0,0)初始和(x,y)final之间的平方距离。距离应该等于(x x)+(y y),因为通常被减去的初始位置是(0,0)。我遇到的问题或语义问题是距离计算。计算并不总是使用正确的x或y值。例如,如果最终位置是(0,-4),则某种程度上x = -1,因此距离等于17而不是16.第一个例子在图像1中。图像2是代码的另一个运行。任何帮助或提示将不胜感激,这是代码:
#include <iostream>
#include <stdlib.h>
#include <ctime>
#include <cmath>
using namespace std;
int main(){
int N;
cout << "Please enter N amount of steps, and for NetBeans users press
'enter' twice." << endl;
cin >> N;
cout << "% RandomWalker " << N << endl;;
int r;
srand( time(0));
int x = 0;
int y = 0;
for(int i = 0; i <= N; i++) {
cout << "(" << x << ", " << y << ")" << endl;
r=rand()%4;
if (r == 0 )
x++;
else if (r == 1 )
x--;
else if (r == 2 )
y++;
else if (r == 3 )
y--;
}
int d = (x*x)+(y*y);
cout << "the distance equals: " << d << endl;
cout << endl;
cout << "x equals before: "<< x << endl;
x = (pow(x,2));
cout << "x equals after squaring: "<< x << endl;
cout << endl;
cout <<"y equals before: " << y << endl;
y = (pow(y,2));
int sum = x + y;
cout <<"y equals after squaring: " << y << endl;
cout << endl;
cout << "x+y after squaring equals: " << sum << endl;
}
答案 0 :(得分:0)
for(int i = 0; i <= N; i++)
由于您从0开始,因此条件应为i < N
。
所以初始化应该是
int d = sqrt((x * x) + (y * y));
另外,在结尾处对x和y值求平方是什么意思?
答案 1 :(得分:0)
您正在根据r的值更改位置之前的位置。因此,打印出的最后一个值不是x和y的实际最终值,而是之前的一步。这就是为什么你会得到意想不到的距离。
答案 2 :(得分:0)
很抱歉延迟回复,我想出了我必须做的事情。赋值的目的是打印出每个位置并找到循环结束时的平方距离。这是任何有兴趣的人的解决方案。
#include <iostream>
#include <stdlib.h>
#include <ctime>
#include <cmath>
using namespace std;
int main(){
int N;
cout << "Please enter N amount of steps, and for NetBeans users press
'enter' twice." << endl;
cin >> N;
cout << "% RandomWalker " << N << endl;;
int r;
srand( time(0));
int x = 0;
int y = 0;
cout << "(" << x << ", " << y << ")" << endl;
for(int i = 1; i <= N; i++) {
r=rand()%4;
if (r == 0 )
x++;
else if (r == 1 )
x--;
else if (r == 2 )
y++;
else if (r == 3 )
y--;
cout << "(" << x << ", " << y << ")" << endl;
}
x = (pow(x,2));
y = (pow(y,2));
int squaredDistance = x + y;
cout << "The squared distance is " << squaredDistance << endl;
}