首页 > 解决方案 > SPOJ 中两个列表的中位数总是错误的

问题描述

问题?给定两个有序的正数列表,打印这些数字的中位数。

输入 共有三行输入。第一行包含一个数字 n,表示每个列表的长度(两者的长度相同)。0 < n <= 2000000。第二行包含第一个列表的 n 个数字,第三行包含第二个列表的 n 个数字。列表中的数字由单个空格分隔。每个数字都是不大于 10 位的正整数。

输出 作为两个列表的中位数找到的数字。

示例 输入输出

我确实尝试过的这段代码:

//
//  main.c
//  MedianTwoList
//
//  Created by Hendro Prasetyo on 29/09/19.
//  Copyright © 2019 Hendro Prasetyo. All rights reserved.
//

#include <stdio.h>
#include<time.h>
#include<stdlib.h>

#include <stdio.h>
#include<time.h>
#include<stdlib.h>

int main(int argc, const char * argv[]) {

int n = 5;

srand( (unsigned int) time(NULL) );
int a[n];
int b[n];
int size = n*2;
int c [size];

int i;
for (i=0; i < n; i++) {
    a[i] = rand() % 2000000;
    b[i] = rand() % 2000000;
}

for (i=0; i < size; i++) {
    if (i < n) {
        c[i] = a[i];
    } else{
        c[i] = b[i-n];
    }
}

int temp;
for (i = 0; i< size; i++) {
    for (int j = i; j>0; j--) {
        if (c[j] < c[j-1]) {
            temp = c[j];
            c[j] = c[j-1];
            c[j-1] = temp;
        }
    }
}
if (i%2 == 1) {
    c[i/2];
}else{
    c[(i/2)-1];
}

return 0;
}

感谢您的帮助,谢谢

标签: carrayslist

解决方案


推荐阅读