其他分享
首页 > 其他分享> > 洛谷题解 P1168 【中位数】

洛谷题解 P1168 【中位数】

作者:互联网

在做这道题目的时候,我个人认为,由于输入测试数据的几组不确定,可以用while先把它的不确定解决了,中间再用普通的方法来写。首先,输入这个数字,如果它是0就代表结束,break退出。如果不是,进入下一步。由于中位数个数奇偶求的方法不一样,输入后直接判断奇偶。(我用了bool,其实也可以用int来代替,奇数是1,偶数是0。也就是s=n%2)接着,用快速的sort排序,排好了之后,直接求中间的数。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n=1,a[10001],c[10001],zw,j=0;
    bool s;
    while(1)//重复
    {
        j++;
        cin>>n;
        if(n==0) 
        {   
            j--;
            break;
        }
        if(n%2==0) //判断奇偶
        {
            zw=n/2;
            s=false;
        }
        else
        {
            zw=n/2+1;
            s=true;
        }
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        sort(a+1,a+1+n);//排序
        if(s==true) c[j]=a[zw];//求中位数,由于有多组测试数据,所以用数组!
        else c[j]=(a[zw]+a[zw+1])/2;
    }
    for(int i=1;i<=j;i++) cout<<c[i]<<endl;
    return 0;
}

 

标签:奇偶,洛谷,10001,int,题解,中位数,n%,zw,P1168
来源: https://www.cnblogs.com/O52LuoTianYi/p/11388081.html