即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

题目1004:Median 2011年浙江大学计算机及软件工程研究生机试真题

编程语言 qq_25721099 17℃ 0评论

题目描述:


S1={11, 12, 13, 14} is 12,


S2={9, 10, 15, 16, 17} is 15. 输入:


输入:若干升序序列,每个序列两行,第一个数字表示数组元素个数。


输出: 每一个case中两个序列的中位数。

样例输入: 4 11 12 13 14


5 9 10 15 16 17


样例输出: 13

解题思路:把两个有序数组合并,sort,根据总长度直接找出中位数。

#include 
#include 
using namespace std;

int main()
{
    int a,b;
    int s[200000];
    while(scanf("%d",&a)!=EOF)
    {
        int i;
        int re;
        for(i=0;iscanf("%d",&s[i]);
        }
        scanf("%d",&b);
        for(i=a;iscanf("%d",&s[i]);
        }
        sort(s,s+a+b);
        re=(a+b)%2==0?((a+b)/2-1):(a+b-1)/2;
        printf("%d\n",s[re]);
    }
    return 0;
}

这道题做的还不够完善,因为题目要求每个序列的元素个数N (≤1000000)。


如果固定初始化这么大的数组,会出错。只是九度OJ这个平台的测试用例少,没有边缘case,才会通过。先记录一下,有待完善

转载请注明:CodingBlog » 题目1004:Median 2011年浙江大学计算机及软件工程研究生机试真题

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情