for循环后的计算不正确(C ++)

时间:2018-03-11 20:49:27

标签: c++ for-loop distance

我目前正在处理的代码是随机漫步者。代码表示一个人在任意方向(向上,向下,向左,向右)上迈出一步,然后分别打印出新位置。在开始时,提示用户输入任何数量的步骤或循环应迭代的次数。代码的目标是计算(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;   
}

3 个答案:

答案 0 :(得分:0)

for(int i = 0; i <= N; i++)

由于您从0开始,因此条件应为i < N

下一期,int d = (x*x)+(y*y);距离公式为enter image description here

所以初始化应该是

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;

}