你会发现这题实在不简单,话说本题主人公一年啥也不干就是恋爱+失恋呵呵(还有看跳水哦) 。
第二题嘛,还是要意思意思的。发现题目并不难,然后直接开打。
题目大意:给你n个实数
p
i
p_{i}
pi。除去最大最小值,求平均值,最后找出最接近的那个数的编号。(就没了……,这不就暴力嘛)
其中,5 <= N <= 20,0 <= Pi <= 10。
确实是暴力,估计很多小朋友要以为我水博客了。
但是,这道题在比赛的结果也是很令人吃惊。全场只有两个人AC了,那这道题到底有什么魔力呢 》》to be continued
找到原题目后,你会说我少了一个重要条件那就是:输入包含多组测试数据。
由于成绩不是比赛时可以看到的,很多小伙伴就直接裂开来。看题还是很重要的。
你会捕捉到另一个关键词:实数
所有
p
i
p_{i}
pi的和是实数吧,那算平均数的时候除以的(n-2)是整型啊。
这样一除,就有大问题。会有误差的啊,发现还好没发现就GG了。
这里给出两种处理方法,
1.乘一个很大的数,这样b避免误差。
2.比较的时候直接相减比较是不是>0,但这里要减去一个很小的数,比如:0.0000001。
还有一个好似可有可无的细节,有的小伙伴用了绝对值比较。
很多人还是用了abs(),可是实数要用fabs()啊……but,他们还过了……
#include<cstdio>
#include<cmath>
using namespace std;
long long n,minn;
double max,min,ans,p[105];
int main()
{
freopen("judgers.in","r",stdin);
freopen("judgers.out","w",stdout);
while(1)
{
ans=0,max=0,min=1000000;
scanf("%lld",&n);
if(n==0) break;
for(long long i=1;i<=n;++i)
{
scanf("%lf",&p[i]);
ans+=p[i];
if(p[i]>max) max=p[i];
if(p[i]<min) min=p[i];
}
ans=(ans-max-min)/(n-2);
min=1000000,minn=0;
for(long long i=1;i<=n;++i)
if(fabs(ans-p[i])+0.000001<min)
{
min=fabs(ans-p[i]);
minn=i;
}
printf("%d\n",minn);
}
}
看似简单的题,不一定简单。注意细节,才能做好题目。