5-53 两个有序序列的中位数 (25分)

来源:互联网 发布:数据库系统原理自考 编辑:程序博客网 时间:2024/05/22 01:55

5-53 两个有序序列的中位数 (25分)

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

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

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

51 3 5 7 92 3 4 5 6

输出样例1:

4

输入样例2:

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

输出样例2:

1

思路
生成两个链表(记录长度),比较寻找到中间的那一个,输出

点击访问 PTA-测验

#include <stdio.h>#include<stdlib.h>/* 评测结果 时间  结果  得分  题目  编译器     用时(ms)  内存(MB)  用户2016-08-31 11:57    答案正确    25  5-53    gcc     44  1   569985011测试点结果 测试点   结果  得分/满分   用时(ms)  内存(MB)测试点1    答案正确    6/6     1   1测试点2    答案正确    6/6     2   1测试点3    答案正确    4/4     13  1测试点4    答案正确    4/4     1   1测试点5    答案正确    1/1     1   1测试点6    答案正确    4/4     44  1查看代码*/int Move(int*,int*,int);int main(){    int n;    scanf("%d",&n);    int*a=(int*)malloc(sizeof(int)*n);    int*b=(int*)malloc(sizeof(int)*n);    for(int i=0;i<n;i++)scanf("%d",&a[i]);    for(int i=0;i<n;i++)    scanf("%d",&b[i]);int Result=Move(a,b,n);printf("%d",Result);    return 0;}int Move(int*a,int*b,int n){    while(--n){        if(*a>=*b)++b;        else ++a;//      printf("%d-",(*a)>(*b)?(*b):(*a));    }    return (*a)>(*b)?(*b):(*a);}
0 0
原创粉丝点击