题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808
AC代码:
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=101;
int a[maxn];
int main(){
int N,K;
scanf("%d%d",&N,&K);
K=K%N;
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
for(int i=N-K;i<N;i++){
if(i==N-K)
printf("%d",a[i]);
else
printf(" %d",a[i]);
}
if(K!=0)
printf(" ");
for(int i=0;i<N-K;i++){
if(i==N-K-1)
{
printf("%d\n",a[i]);
}
else{
printf("%d ",a[i]);
}
}
/*情况1:
for(int i=0;i<N-K;i++){
if(i==N-K-1)
{
printf(" %d\n",a[i]);
}
else{
printf(" %d",a[i]);
}
}
*/
return 0;
}
如果代码是情况一,则只能得十五分,当K=0时,会输出
所以我修改了代码,
二刷(抄大佬代码):
#include <iostream>
#include <cstdio>
using namespace std;
void revers(int *a,int m,int n){
for(int i=m;i<(m+n)/2;i++){//这里是<=,而不是<
//for(int i=m;i<(m+n)/2;i++){
int tmp=a[i];
a[i]=a[m+n-i];
a[m+n-i]=tmp;
}
}
int main(){
int m,n;
scanf("%d%d",&m,&n);
m%=n;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
revers(a,0,n-m-1);
revers(a,n-m,n-1);
revers(a,0,n-1);
for(int i=0;i<n;i++)
printf("%d%s",a[i],(i-n+1?" ":"\n"));
return 0;
}