思路:定义交换函数reverse 0......(n-m-1),(n-m),........(n-1)
1换:(n-m-1)......0,(n-m),........(n-1)
2换:(n-m-1)..........0,(n-1).............(n-m)
3换:(n-m)........(n-1),0..............(n-m-1)
#include<cstdio>
void reverse(int A[],int l,int r)
{
int i,j;
int temp;
for(int i=i,j=r;i<j;i++,j--)
{
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
int main()
{
int N,M;
scanf("%d%d",&N,&M);
int A[110];
for(int i=0;i<N;i++)
{
scanf("%d",&A[i]);
}
reverse(A,0,N-M-1);
reverse(A,N-M,N-1);
reverse(A,0,N-1);
for(int i=0;i<N;i++)
{
printf("%d ",A[i]);
}
return 0;
}
并不是简单的做法,答案虐我,直接按要求输出 移动次数尽可能少
#include<cstdio>
int main()
{
int a[110];
int n,m,count=0;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=n-m;i<n;i++)
{
printf("%d",a[i]);
count++;
if(count<n) printf(" ");
}
for(int i=0;i<n-m;i++)
{
printf("%d",a[i]);
count++;
if(count<n) printf(" ");
}
return 0;
}
注意:通过设置变量count来保证之间用空格分隔,结尾没有多余空格,已经出现过好多次