方法一:(定义右移一位函数)
#include<stdio.h>
#include<stdlib.h>
void Rmove(int* A,int N)
{
int i,temp=A[N-1];
for(i=N-2;i>=0;i--)
A[i+1]=A[i];
A[0]=temp;
return;
}
int main()
{
int i,M,N;
scanf("%d%d",&N,&M);
int *A=(int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++)
scanf("%d",A+i);
for(i=0;i<M;i++)
Rmove(A,N);
printf("%d",*A);
for(i=1;i<N;i++)
printf(" %d",A[i]);
return 0;
}
方法二:(使用了另外一个数组)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,M,N;
scanf("%d%d",&N,&M);
int *A=(int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++)
scanf("%d",A+i);
int *B=(int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++)
B[(i+M)%N]=A[i];
printf("%d",*B);
for(i=1;i<N;i++)
printf(" %d",*(B+i));
return 0;
}
方法三:(不对数组元素进行移位,直接遍历输出)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,M,N;
scanf("%d%d",&N,&M);
int *A=(int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++)
scanf("%d",A+i);
M%=N;
for(i=0;i<N-1;i++)
printf("%d ",A[(i+N-M)%N]);
printf("%d",A[(i+N-M)%N]);
return 0;
}