AC代码:
思路:模拟找一个最佳裁判,排序,找出 给出的分数与平均值之差最小的 ,往前找同样分数下编号最靠前的
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct{
int v;
int p;
}num;
num a[20];
void search(int x)
{
if(x>=2 && a[x].v==a[x-1].v)
return search(x-1);
cout<<a[x].p<<endl;
}
int cmp(num a,num b)
{
if(a.v!=b.v) return a.v<b.v;
return a.p<b.p; //相同得分按编号小到大
}
int main(void)
{
int i,aver,sum;
sum=0;
for(i=1;i<=7;i++)
{
cin>>a[i].v;
sum+=a[i].v; //和
a[i].p=i; //初始化位次
}
aver=sum/7; //平均
sort(a+1,a+7+1,cmp); //排序
a[0].v = 0x3f3f3f3f;
for(i=1;i<=7;i++)
{
if(a[i].v==aver) //找到最佳直接输出
{
cout<<a[i].p<<endl;
break;
}
if(a[i].v>aver)
{
if(abs(a[i].v-aver)>=abs(a[i-1].v-aver))
search(i-1); //v相等的第一个
else
cout<<a[i].p<<endl; //平均差最小 确定最佳裁判
break;
}
}
}
思路:与平均值的差值排序,输出第一个
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct{
int v;
int p;
}judge;
judge a[20];
int aver;
int cmp(judge a,judge b)
{
if(a.v!=b.v) return abs(a.v-aver) < abs(b.v-aver);
return a.p<b.p; //相同得分按编号小到大
}
int main(void)
{
// std::ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);
int i,sum;
sum = 0;
for(i=1;i<=7;i++)
{
cin>>a[i].v;
sum += a[i].v; //和
a[i].p = i; //初始化位次
}
aver = sum/7; //平均
sort(a+1,a+7+1,cmp); //排序
cout<<a[1].p<<endl;
}