Description
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。
Input
输入数据的个数n n个整数移动的位置m。n,m<1000
Output
移动后的n个数,每个数后面输出一个空格
Sample Input
10 1 2 3 4 5 6 7 8 9 10 2
Sample Output
9 10 1 2 3 4 5 6 7 8
Note:
思想是每趟暂存最后一个元素 a[n],然后将前 n-1 个元素依次后移一位,再给 a[0] 赋上tmp 值。
m 为趟数。
#include <stdio.h>
int main()
{
int a[100], i, n, m;
void Move(int *a, int n, int m);//声明
scanf("%d", &n);
for(i=0; i<n; i++)
scanf("%d", a+i);
scanf("%d", &m);
Move(a, n, m);
for(i=0; i<n; i++)
printf("%d ", *(a+i));
return 0;
}
void Move(int *a, int n, int m)
{
int i, tmp;
while(m)//m为趟数,每趟将最末元素移动到第一个元素位置
{
tmp = *(a+n-1);//暂存最后一个元素
for(i=n-1; i>0; i--) //前面 n-1 个元素一次后移一位
*(a+i) = *(a+i-1);
*a = tmp;
m--;
}
}