1 题目
有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。
2 分析
假设n
的值为10
即数组arr
大小为10
,单独观察一次偏移的过程,可以发现就是事先把最后一个值arr[9]
用临时变量t
暂存起来,然后将整个数组向后移位一次,此时再将暂存的arr[9]
赋值给arr[0]
,这样就完成了一次偏移,那么一共要偏移m
次,就将循环执行m
次即可。
3 实现
#include <stdio.h>
#define N 10 // 假定数组大小为10
int main()
{
int arr[N] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int m;
int i; // 循环控制变量
int j; // 循环控制变量
int t; // 临时变量
printf("请输入偏移量m的值:", &m);
scanf("%d", &m);
for (i = 0; i < m; i++) {
t = arr[N - 1]; // 暂存最后一个位置的值
for (j = N - 1; j >= 0; j--) {
arr[j + 1] = arr[j]; // 将整个数组向后移动一个位置
}
arr[0] = t; // 将暂存的最后一个元素保存在第一个位置
}
// 输出数组
for (i = 0; i < N; i++) {
printf("%d ", arr[i]);
}
}
4 运行结果
PS E:\C++WorkSpace> cd "e:\C++WorkSpace\" ; if ($?) { g++ FFF.cpp -o FFF } ; if ($?) { .\FFF }
请输入偏移量m的值:2
8 9 0 1 2 3 4 5 6 7
PS E:\C++WorkSpace> cd "e:\C++WorkSpace\" ; if ($?) { g++ FFF.cpp -o FFF } ; if ($?) { .\FFF }
请输入偏移量m的值:5
5 6 7 8 9 0 1 2 3 4