#include <stdio.h>
#include <stdlib.h>
#define overflow 1
typedef struct node
{
int *elem;
int length;
} sqlist;
void createlist(sqlist *l,int len)
{
l->elem=(int *)malloc(sizeof(int)*len);
if(!l->elem) exit(overflow);
int i;
for(i=1; i<=len; i++)
scanf("%d",&l->elem[i]);
l->length=len;
}
void reverse(sqlist *l,int start,int end,int mid)//类似数组逆置
{
int t,i;
for(i=1; i<=mid; i++)//****** 学习
{
t=l->elem[start];
l->elem[start++]=l->elem[end];
l->elem[end--]=t;
}
}
void print(sqlist *l)
{
int i;
for(i=1; i<l->length; i++)
printf("%d ",l->elem[i]);
printf("%d\n",l->elem[l->length]);
}
int main()
{
int n;
sqlist l;
scanf("%d",&n);
createlist(&l,n);
int t,m;
scanf("%d",&t);
while(t--)
{
scanf("%d",&m);
//例如 1 2 3 4 5 n=5,m=2;
//首先,先全部逆置 ,变成5 4 3 2 1
//其次,对前半部分逆置 ,变成3 4 5 2 1
//最后,对后半部分逆置,变成3 4 5 1 2
reverse(&l,1,n,n/2);
reverse(&l,1,n-m,(n-m)/2);
reverse(&l,n-m+1,n,m/2);
print(&l);
}
return 0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交