新的整数数组向右移动?

时间:2018-10-19 09:03:09

标签: c++ arrays algorithm

我应该输入数组x[ ]并创建一个新数组y[ ],该数组将从原始数组向右移。

我对第一个元素y[0]

感到困扰
  • 例如如果我输入{7, 8, 4, 2, 3}
  • 以下代码返回:{-693726240, 7, 8, 4, 2}

错误在哪里?

谢谢。

#include <iostream>
using namespace std;

int main()
{
    int i, j, n, m=0, x[100],y[100];
    cin >>n;

    for(int i=0; i<n; i++)
    {
        cout << "enter "<< i+1 <<". element: ";
        cin >> x[i];

        if (i>0) 
            y[m++] = x[i-1];
        else     //THIS IS FOR Y[0] BUT DOESN'T WORK
            y[m++] = x[n-1];  
    }
    // ARRAY SHIFTED TO THE RIGHT:
    for(int j=0; j<m; j++)
    {
        cout << y[j]<<" ";
    }

    return 0;    
}

4 个答案:

答案 0 :(得分:3)

循环以i == 0开头。您在第i次迭代中读取了第i个元素。在第0次迭代中读i == n - 1时,x[n - 1]还在将来。 C ++没有义务为您将变量初始化为任何特定的值,因此,当您从尚未初始化的位置读取数据时,很可能会遇到垃圾(在这种情况下为-693726240)。

要解决此问题,您必须解决时间悖论。在迭代0时不要分配任何东西;等到循环完成并输入所有数据后,再潜入并填充第0个元素。

或者,先阅读整个x,然后在知道所有值的情况下,使用当前算法将x移入y(即,将当前的“一切皆有”循环分开)进入读取循环和移位循环)。这样,当您从x开始时,所有y的值都将被知道,并且不会有任何时间旅行的麻烦。

答案 1 :(得分:0)

假设您写了y[m++] = x[n-1]

,我假设您正在寻找一种循环移位的方法

Amadan的答案强调了一种解决问题的方法,这是您可以遵循的一些代码:

for(int i = 0;i < n-1;i++){
 cin>>x[i];`
 y[i+1] = x[i];
}
cin>>x[n-1];
y[0] = x[n-1];

答案 2 :(得分:0)

很好,@ Amadan,谢谢您的解释和快速回答

我还删除了“ j”和“ m”作为新数组的单独变量, 认为实际上并不需要它,我可以使用与原始数组相同的“ i”和“ n”(对吗?还是应该保留新变量?)

这里的正确代码有效:

#include <iostream>
using namespace std;
int main()
{
    int i, j, n, m=0, x[100],y[100];
       cin >>n;

for(int i=0; i<n; i++)
    {
        cout << "enter "<< i+1 <<". element: ";
        cin >> x[i];

            if (i>0) 
                y[i] = x[i-1];
    }

    y[0] = x[n-1];
    // ARRAY SHIFTED TO THE RIGHT:
for(int i=0; i<n; i++)
    {
    cout << y[i]<<" ";
    }
return 0;

}

答案 3 :(得分:0)

我也尝试了@Amadan建议的其他替代方法,并将其用于左移 -首先输入所有元素,然后在所有已知元素后分配另一个数组元素

我认为这是最好的,经过测试和工作。再次感谢:

#include <iostream>
using namespace std;
int main()
{
    int i, n, x[100],y[100], z[100];
       cin >>n;

for(int i=0; i<n; i++)
    cin >> x[i];

    // ARRAY SHIFTED TO THE RIGHT:
for(int i=0; i<n; i++)
    {
    if (i > 0)  y[i] = x[i-1];
    else        y[i] = x[n-1]; 
    cout << y[i]<<" ";
    }
    cout << endl;

    // ARRAY SHIFTED TO THE LEFT:
for(int i=0; i<n; i++)
    {
    if (i < n-1)    z[i] = x[i+1];
    else        z[i] = x[0]; 
    cout << z[i]<<" ";
    }
return 0;

}