题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。
思路:
- 先保存数组最后面的一个数
- 把最后那个数前面的所有数向后移动一位
- 最后,套入循环语句,循环m次,即移动m个位置
代码:
#include <stdio.h>
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int n=sizeof(a)/4;
int *p=a; //p指向数组第一个元素
printf("数组里有%d个元素\n",n);
printf("移动前的数组为:\n");
for(p=a;p<a+n;p++){
printf("%-4d",*p);
}
int m=3; //移动3次
for(int i=0;i<m;i++){
p=a+n-1; //p指向数组最后一个元素
int temp;
temp=*p;
//把最后一位数前面的所有数,依次后移一位
while(p>a){
*p=*(p-1);
p--;
};
*p=temp;
}
//输出数组
printf("\n移动后的数组为:\n");
for(p=a;p<a+n;p++){
printf("%-4d",*p);
}
return 0;
}
运行:
数组里有10个元素
移动前的数组为:
1 2 3 4 5 6 7 8 9 10
移动后的数组为:
8 9 10 1 2 3 4 5 6 7