C - 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
Description
一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),设计一个时间复杂度为O(N)、空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段。
注意:交换操作会有多次,每次交换都是在上次交换完成后的顺序表中进行。
Input
第一行输入整数len(1<=len<=1000000),表示顺序表元素的总数;
第二行输入len个整数,作为表里依次存放的数据元素;
第三行输入整数t(1<=t<=30),表示之后要完成t次交换,每次均是在上次交换完成后的顺序表基础上实现新的交换;
之后t行,每行输入一个整数m(1<=m<=len),代表本次交换要以上次交换完成后的顺序表为基础,实现前m个元素与后len-m个元素的交换;
Output
输出一共t行,每行依次输出本次交换完成后顺序表里所有元素。
Sample
Input
10 1 2 3 4 5 6 7 8 9 -1 3 2 3 5
Output
3 4 5 6 7 8 9 -1 1 2 6 7 8 9 -1 1 2 3 4 5 1 2 3 4 5 6 7 8 9 -1
1 #include<stdio.h> 2 3 4 int a[1000005]; 5 6 void nizhi(int *a, int l, int r) 7 { 8 while(l<r) 9 { 10 int t; 11 t = a[l]; 12 a[l] = a[r]; 13 a[r] = t; 14 l++,r--; 15 } 16 } 17 int main() 18 { 19 int n; 20 scanf("%d",&n); 21 int i; 22 for(i=0; i<n; i++) 23 { 24 scanf("%d",&a[i]); 25 } 26 int t; 27 scanf("%d",&t); 28 while(t--) 29 { 30 int x; 31 scanf("%d",&x); 32 nizhi(a,0,n-1); 33 nizhi(a,0,n-1-x); 34 nizhi(a,n-x,n-1); 35 for(i=0; i<n; i++) 36 { 37 if(i==0) 38 printf("%d",a[i]); 39 else 40 printf(" %d",a[i]); 41 } 42 printf("\n"); 43 } 44 return 0; 45 }

浙公网安备 33010602011771号