描述
已知va和vb分别为非递减有序线性表,将va和vb进行合并为新的线性表vc,并保持vc仍然非递减有序。
本题中,线性表元素为整数。线性表的最大长度为1000。
输入
输入数据有多组,第一行为测试数据的组数n,接下来为2n行,每一组测试数据有两行:
第一行的第一个数为va的元素个数,后面是n个整数,代表va的所有元素
第二行的第一个数为vb的元素个数,后面是n个整数,代表vb的所有元素
输出
输出合并后的长度以及vc的所有元素
样例输入
2
2 1 2
2 2 3
3 1 2 3
3 4 5 6
样例输出
4 1 2 2 3
6 1 2 3 4 5 6
提示
你也可以使用链表来实现,有空也练练吧
1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 #include<ctype.h> 5 6 int a[1000],b[1000],c[2000]; 7 8 void deal(int a[], int m, int b[], int n) 9 { 10 int i,j,k,s; 11 i=k=j=s=0; 12 while(i<m && j<n) 13 { 14 if(a[i]<b[j]) 15 { 16 c[k]=a[i]; 17 i++;k++; 18 } 19 else if(a[i]==b[j]) 20 { 21 c[k]=a[i]; 22 c[k+1]=a[i]; 23 k+=2; 24 i++;j++; 25 } 26 else 27 { 28 c[k]=b[j]; 29 j++;k++; 30 } 31 } 32 if(i==m) 33 { 34 while(j<n) c[k++]=b[j++]; 35 } 36 if(j==n) 37 { 38 while(i<m) c[k++]=a[i++]; 39 } 40 printf("%d",k); 41 for(i=0; i<k; i++) 42 printf(" %d",c[i]); 43 printf("\n"); 44 } 45 46 void solve() 47 { 48 int N,i,m,n; 49 scanf("%d",&N); 50 while(N--) 51 { 52 scanf("%d",&m); 53 for(i=0; i<m; i++) 54 scanf("%d",&a[i]); 55 scanf("%d",&n); 56 for(i=0; i<n; i++) 57 scanf("%d",&b[i]); 58 deal(a,m,b,n); 59 } 60 } 61 62 63 int main() 64 { 65 solve(); 66 getchar(); 67 getchar(); 68 return 0; 69 }
作者:xueda120
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.