谭浩强C++课后习题25——移动数组
题目描述:有n个整数,使前面各数顺序向后移动m个位置,最后m个数变成最前面m个数。写一个函数实现以上功能,在主函数中输入n个整数,输出调整后的n个数。
算法思路:可以用递归来做,一个一个移动,直到剩余需要移动的个数为0时结束移动,递归结束。保存最后一个数,然后从后往前循环移动,最后让第一个数等于原最后的数,每移动一个数让m减一直到m为0。
#include<iostream>
using namespace std;
void move(int num[], int n, int m) {
int temp = num[n - 1];
for (int i = n - 2;i >= 0;i--)
num[i + 1] = num[i];
num[0] = temp;
m--;
if (m > 0) {
move(num, n, m);
}
}
int main() {
int n;
cout << "输入数组数字个数:";
cin >> n;
int* num = new int[n];
cout << "输入数组:";
for (int i = 0;i < n;i++)
cin >> num[i];
int m;
cout << "后移位数:";
cin >> m;
move(num, n, m);
cout << "新数组:";
for (int i = 0;i < n;i++)
cout << num[i] << " ";
return 0;
}
运行测试结果: