题目:有 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