洛谷题解 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