【问题描述】
有n个整数,使其中所有整数顺序向右(向后)循环移动m个位置。编写一个函数实现以上功能,在主函数中输入n个整数并输出调整后的n个整数。
【输入形式】
首先打印“Input n,m:”;然后直接在冒号后面输入数据正整数n,表示共有n个整数;空一格;输入m,表示顺序向右(向后)循环移动m个位置;回车。
连续输入n个整数数值,每个数值之间用空格隔开;回车;
【输出形式】
首先打印“After move:”;然后直接在冒号后面输出n个已调整后的整数,其中每个整数占居五个字符位,如果不足5个字符位,则在其前面用空格填补。
【输入样例】(下划线部分表示输入,无下划线部分表示输入前的提示)
Input n,m:5 3
1 2 3 4 5
【输出样例】
After move: 3 4 5 1 2
解题思路与易错分析:
这个题一共有两个易错点:
1:对于移动的理解这就像当与是一个环首个元素向后移动一个原最后的一个元素成为第一个元素,然后就是一个一个循环
其实不难看出这其实就是一个求模的问题,因为是看成环,而不是环现实中你可能用数组来存的,所以要求模(不能超过数组的长度啊)
2:对于iomanip的中setw与setfill的运用
下面附上我的代码:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout << "Input n,m:";
int n,m;
cin >> n >> m;
int s1[n];
int s2[n];
for(int i =0; i < n; i++)
{
cin >> s1[i];
}
for(int j =n-1; j >=0; j--)
{
s2[(j+m)%n] = s1[j];
}
cout << "After move:";
for(int i =0; i < n; i++)
{
cout << setw(5) << setfill(' ')<<s2[i];
}
return 0;
}