标签:temp int void len 算法 整数 互换 之逆置 输入
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
#include<bits/stdc++.h> using namespace std; int a[1000000]; int len; void output(int a[],int n) { for(int i = 0; i < n; i++) printf("%d%c",a[i],(i == n-1 ? '\n':' ')); } //void swap(int &a,int &b) //{ // int temp; // temp = a; // a = b; // b = temp; //} void Reverse(int a[],int start,int last) { while(start<last) { int t; t = a[start]; a[start] = a[last]; a[last] = t; start++; last--; } } int main() { int t,m; scanf("%d",&len); for(int i = 0; i < len; i++) scanf("%d",&a[i]); scanf("%d",&t); while(t--) { scanf("%d",&m); Reverse(a,0,len-1); printf("reverse(0,len-1):\n"); output(a,len); Reverse(a,len-m,len-1); printf("reverse(len-%d,len-1):\n",m); output(a,len); Reverse(a,0,len-m-1); printf("reverse(0,len-m-1):\n"); output(a,len); } return 0; }
标签:temp,int,void,len,算法,整数,互换,之逆置,输入 来源: https://www.cnblogs.com/zhang-zsq/p/12859155.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。