1001

来源:互联网 发布:淘宝杯子宝贝卖点范文 编辑:程序博客网 时间:2024/03/29 19:48

代码写的很挫,需要处理的特殊情况是分数最小的包括id最小的时候,要保留id最小的。我按照分数从大到小排序,分数相等时按照id从小到大排序,这样,可能出错的是a[0]和a[1],当两者的pi相等时,需要交换一下两者的位置。

#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<math.h>using namespace std;int n;struct Node{     int id;     double pi;};int cmp1(Node n1,Node n2){    if(n1.pi!=n2.pi) return n1.pi>n2.pi;    else return n1.id<n2.id;}Node a[25];int main(){while(scanf("%d",&n)&&n){    int cnt=1;for(int i=0;i<n;i++){    scanf("%lf",&a[i].pi);    a[i].id=cnt++;}sort(a,a+n,cmp1);//这儿写成cnt了,导致WA了一次if(a[0].pi==a[1].pi){    Node tmp=a[1];    a[1]=a[0];    a[0]=tmp;}double sum=0,avg=0;for(int i=1;i<n-1;i++)    sum+=a[i].pi;avg=sum/(n-2);//输出和平均分最接近的double res=99999999;int ans;for(int i=1;i<n-1;i++){    if(res>(double)fabs(a[i].pi-avg)){    res=fabs(a[i].pi-avg);    ans=a[i].id;}}printf("%d\n",ans);}//system("pause");    return 0;}


原创粉丝点击