PTA 两个有序序列的中位数(25分)

两个有序序列的中位数 
 

已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列,的中位数指A(N-1)/2的值,即第(N+1)/2个数(A0为第1个数)。

 

输入格式:

输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。

输出格式:

在一行中输出两个输入序列的并集序列的中位数。

输入样例1:

5
1 3 5 7 9
2 3 4 5 6
 

输出样例1:

4
 

输入样例2:

6
-100 -10 1 1 1 1
-50 0 2 3 4 5
 

输出样例2:

1

思路:建立一个数组,长度为两个序列的总和,将序列中所有数字排序并且存入数组中,然后进行判断。
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i,k=0,l=0,n;
 5     int mid;
 6     scanf("%d",&n);
 7     int a[n],b[n],c[2*n];
 8     for(i=0;i<n;i++){
 9         scanf("%d",&a[i]);
10     }
11     for(i=0;i<n;i++){
12         scanf("%d",&b[i]);
13     }
14     i=0;
15     while(k<n&&l<n){
16         if(a[k]>b[l]){
17             c[i++]=b[l++];
18         }else{
19             c[i++]=a[k++];
20         }
21     }
22     while(k<n){
23         c[i++]=a[k++];
24     }
25     while(l<n){
26         c[i++]=a[l++];
27     }
28     mid=c[(i-1)/2];
29     printf("%d",mid);
30     return 0;
31 }

 



posted @ 2020-04-15 23:15  莴苣&  阅读(1414)  评论(0编辑  收藏  举报