zoukankan      html  css  js  c++  java
  • 九度OJ 1157:中位数 (中位数、排序)

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:2188

    解决:1294

    题目描述:

    中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数).
    给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)

    输入:

    该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1<=N<=10000.
    接着N行为N个数据的输入,N=0时结束输入

    输出:

    输出中位数,每一组测试数据输出一行

    样例输入:
    4
    10
    30
    20
    40
    3
    40
    30
    50
    4
    1
    2
    3
    4
    0
    样例输出:
    25
    40
    2
    来源:
    2011年北京大学计算机研究生机试真题

    思路:

    用快速排序,然后找出中位数。

    我这个代码是最早写的,用的冒泡,效率较低。


    代码:

    #include <stdio.h>
     
    #define M 10000
     
    int main(void)
    {
        int a[M];
        int n, i, j, tmp;
     
        while (scanf("%d", &n) != EOF)
        {
            if (n == 0)
                break;
            for (i=0; i<n; i++)
                scanf("%d", &a[i]);
     
            for (i=0; i<n-1; i++)
            {
                for (j=0; j<n-1-i; j++)
                {
                    if (a[j] > a[j+1])
                    {
                        tmp = a[j];
                        a[j] = a[j+1];
                        a[j+1] = tmp;
                    }
                }
            }
     
            //for (i=0; i<n; i++)
            //  printf("%d	", a[i]);
     
            printf("%d
    ", (n%2)==0 ? (a[n/2]+a[n/2-1])/2 : a[n/2]);
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1157
        User: liangrx06
        Language: C
        Result: Accepted
        Time:550 ms
        Memory:912 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    Spring导出可以运行的jar包
    sed 多行处理详细总结
    Shell获取某目录下所有文件夹的名称
    linux 删除换行符
    linux 切分文件
    jdbctemplate 获取数据表结构的方法&注意事项
    linux 使用ifstat查看网络使用情况
    postgresql 函数获取多个字段的数字大小值
    vim 正则替换功能
    jstl 格式化
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083870.html
Copyright © 2011-2022 走看看