题目描述
调用自定义后移函数move(int *a, int n, int m)来进行循环移位,对n(n<20)个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数,如下: n=10, m=3时:输入:1 2 3 4 5 6 7 8 9 10,输出:8 9 10 1 2 3 4 5 6 7
输入
输入多组测试数据,每组先输入n(n < 20)和m(m < n),再输入n个整数。
输出
输出循环移动m个数后的序列,数据间空格隔开。
样例输入 Copy
10 4 1 2 3 4 5 6 7 8 9 10 7 2 1 2 3 4 5 6 7
样例输出 Copy
7 8 9 10 1 2 3 4 5 6 6 7 1 2 3 4 5
#include<stdio.h>
#define N 20
void move(int *a, int n, int m) //定义另一个数组b[]用于存放移位后的数组,这里也可以是void move(int a[], int n, int m),一个意思,都是形参数组a[]
//void move(int a[], int n, int m)
{
int b[N]={0},item=0;
for(int i=0;i<n;i++){
item=m+i;
if(item>(n-1))
item-=n;
b[item]=a[i];
}
for(int i=0;i<n;i++)
a[i]=b[i];
}
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF){
int a[N]={0};
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
move(a,n,m); //注意函数中指针的使用,因为a是数组,所以他本身表示数组开头的地址,可以直接使用
for(int i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d",a[n-1]);
printf("\n");
}
return 0;
}