第一版 (超时)
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int data[100010];
int length;
}sqlist;
void initial(sqlist &l,int n){
l.length=n;
}
void create(sqlist &l){
int i;
for(i=1;i<=l.length;i++)
scanf("%d",&l.data[i]);
}
void inverse(sqlist &l){
int i,t;
t=l.data[1];
for(i=1;i<=l.length-1;i++){
l.data[i]=l.data[i+1];
}
l.data[l.length]=t;
}
void print(sqlist l){
int i;
for(i=1;i<=l.length;i++){
if(i!=l.length) printf("%d ",l.data[i]);
else printf("%d\n",l.data[i]);
}
}
int main()
{
int n,x,m;
scanf("%d",&x);
while(x--){
sqlist l;
scanf("%d %d",&n,&m);
initial(l,n);
create(l);
while(m--){inverse(l);}
print(l);
}
return 0;
}
第二版(借鉴版)
方法:三次逆置 把数组从m出分开 第一次全体逆置 第二次m之前逆置 第三次m之后逆置
TML(还是有错误)
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int data[100010];
int length;
}sqlist;
void initial(sqlist &l,int n){
l.length=n;
}
void create(sqlist &l){
int i;
for(i=1;i<=l.length;i++)
scanf("%d",&l.data[i]);
}
void inverse(sqlist &l,int x,int y){
int i,j,t;
i=x,j=y;
while(i<j){
t=l.data[i];
l.data[i]=l.data[j];
l.data[j]=t;
i++;j--;
}
}
void print(sqlist l){
int i;
for(i=1;i<=l.length;i++){
if(i!=l.length) printf("%d ",l.data[i]);
else printf("%d\n",l.data[i]);
}
}
int main()
{
int n,x,m;
scanf("%d",&x);
while(x--){
sqlist l;
scanf("%d %d",&n,&m);
initial(l,n);
create(l);
inverse(l,1,l.length);
inverse(l,1,l.length-m);
inverse(l,l.length-m+1,l.length);
print(l);
}
return 0;
}