题目描述
注意:先将顺序表元素调整为符合要求的内容后,再做输出,输出过程只能用一个循环语句实现,不能分成两个部分。
输入
之后输入n行,每行先输入整数len与整数m(分别代表本表的元素总数与前半表的元素个数),之后输入len个整数,代表对应顺序表的每个元素。
输出
示例输入
2 10 3 1 2 3 4 5 6 7 8 9 10 5 3 10 30 20 50 80
示例输出
4 5 6 7 8 9 10 1 2 350 80 10 30 20
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define LISTINCREASMENT 100 #define LISTSIZE 10 #define OVERFLOW -1 #define OK 1 typedef int ElemType;typedef struct {ElemType * elem;int length;int listsize; } Sqlist;int SqInitial(Sqlist &L) { L.elem=(ElemType *) malloc (LISTSIZE*sizeof(ElemType));if (!L.elem) exit(OVERFLOW); //当前存储空间已满;L.length=0;L.listsize=LISTSIZE;return OK; }int ListInsert(Sqlist &L,int i,ElemType e) // 在顺序表L的第 i 个元素之前插入新的元素e, {if(i<1|| i > L.length+1) printf("ERROR!");// 插入位置不合法if(L.length>=L.listsize){ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREASMENT)*sizeof(ElemType));if(!newbase) return OVERFLOW;// 当前存储空间已满 L.elem=newbase;L.listsize+=LISTINCREASMENT; }ElemType * q=&(L.elem[i-1]);ElemType * p;for(p=&(L.elem[L.length-1]); p>=q; --p)*(p+1)=*p;//插入位置及之后的元素右移*q=e;// 插入e++L.length; // 表长增1return OK;} void exchange(Sqlist&L,int m)//实现顺序表 A 中前 m 个元素和后 n 个元素互换 {int i,j,k,x;for(i=0,j=m;j<L.length;i++,j++){x=L.elem[j];for(k=j;k>i;k--)//元素的后移;L.elem[k]=L.elem[k-1];L.elem[i]=x;} } int main() {int i,j,k,m,n,len;scanf("%d",&n);for(i=0;i<n;i++){Sqlist L;//顺序表的定义;SqInitial(L);//顺序表的初始化;scanf("%d%d",&len,&m);for(j=1;j<=len;j++){scanf("%d",&k);ListInsert(L,j,k);//顺序表元素的添加;}exchange(L,m);// 实现顺序表 A 中前 m 个元素和后 n 个元素互换for(j=1;j<=L.length;j++)//顺序表所有元素的输出;{if(j!=L.length) printf("%d ",L.elem[j-1]);elseprintf("%d\n",L.elem[j-1]);}} }
#include <iostream> using namespace std; int main() { int n; int t; cin>>t; while(t--) { int m; cin>>n>>m; int a[1001000]; int i,j; for(i=0;i<n;i++) cin>>a[i]; for(i=0,j=m;j<n;j++,i++) { int h=a[j]; for(int k=j;k>i;k--) a[k]=a[k-1]; a[i]=h; } for(i=0;i<n-1;i++) cout<<a[i]<<" "; cout<<a[n-1]<<endl; } return 0; }