题目1157:中位数

来源:互联网 发布:罗杰疑案知乎 编辑:程序博客网 时间:2024/05/17 22:51
题目描述:

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

输入:

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

输出:

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

样例输入:
4103020403403050412340
样例输出:
25402


C++代码:

#include<iostream>#include <algorithm>using namespace std;int main(){    int num[10001];    int n;    while(cin>>n,n)    {        for(int i=0;i<n;i++)            cin>>num[i];        sort(num,num+n);        if(1==n%2)            cout<<num[n/2]<<endl;        else            cout<<(num[n/2]+num[n/2-1])/2<<endl;    }    return 1;}/**************************************************************    Problem: 1157    User: Carvin    Language: C++    Result: Pending****************************************************************/

Java代码:

//package oj1157; import java.util.Arrays;import java.util.Scanner; public class Main{    public static void main(String args[]){        Scanner in=new Scanner(System.in);        while(in.hasNext()){            int n=in.nextInt();            if(0==n)                break;                  //n=0是程序结束            int []num=new int [n];            for(int i=0;i<n;i++)                num[i]=in.nextInt();            Arrays.sort(num);            int mid=(n-1)/2;            if(0!=mid/2)                System.out.println(num[mid]);            else {                System.out.println((num[mid]+num[mid+1])/2);            }        }//while    }//main}//Main/**************************************************************    Problem: 1157    User: Carvin    Language: Java    Result: Pending****************************************************************/



0 0
原创粉丝点击