编写一个使用大小为8(8)的数组的程序,然后提示 用户为数组输入八个整数。该计划应该做 以下内容:
- 打印输入/输出样本中给出的输出中的数字。
- 提示用户输入一个整数值k,然后程序将数组元素的k个位置向右移,而最后一个 K个元素被移动到数组的开头。例如:if 我们有一个数组[1 2 3 4 5 6 7 8],向右移动2个位置 应该给阵列[7 8 1 2 3 4 5 6]。
醇>
我做了这个问题,但我得到了输出(如果假设班次数= 3) [1 0 3 1 2 3 4 5]这是错误的,输出应该是[6 7 8 1 2 3 4 5]
这是我的代码,这是什么错误?
#include<iostream>
using namespace std;
int main()
{
int arrays[8];
int k;
cout<<"Enter Values for a Arrays of size 8"<<endl;
for(int i=0; i<8; i++)
{
cin>>arrays[i];
}
cout<<"You Entered Numbers are: [ ";
for(int i=0; i<8; i++)
{
cout<<arrays[i]<<" ";
}
cout<<" ]\n";
cout<<"Enter the Number of Shift: ";
cin>>k;
for(int i=8; i>0; i--)
{
arrays[i]=arrays[i-k];
}
//The Output
for(int i=0; i<8; i++)
{
cout<<arrays[i]<<" ";
}
return 0;
}
答案 0 :(得分:1)
错误在
for(int i=8; i>0; i--)
{
arrays[i]=arrays[i-k];
}
首先,当i<3
获得负面索引时。您可以使用返回提醒的%
运算符来解决此问题。
其次,您要覆盖仍然必须复制的值。例如,假设移位为3:在第一次迭代中,您将第五个元素复制到第八个元素内。但是你也应该把第八个复制到第三个。
一个简单的解决方案是声明一个新数组并执行以下操作:
int shifted[8];
...
for (int i=0; i<8; i++)
{
shifted[i] = arrays[(i-k)%8]
}
还考虑使用C ++向量。