一年多没做题了,今天做了个现参赛的水题,第一感觉题目苦涩,没读懂
,然后坚持读了几遍,懂了边思考啊,就有了成果。
可写的有两点吧:
1:推导,期望值ans 的组成:第一次的均值+待定均值
即ans =(a1+...an)/n+ans*m/n
最后结果:ans =(a1+..an)/(n-m);
由公式也可以看出 n!=m 由题意也可n==m时 是inf
2:精确度问题,以前老犯这错误,都是模模糊糊滴过了,这次尤其注意了一下
在判断 sum ==0 时 ,用 int 定义 sum 判断 ,AC ,用 double 判断 意料之中的
最熟悉 的 wrong anser ...
楼主也不小白式的讲解了,提供两个连接供大家学习一个是微软的官方资料
一个是脚步之家的博客
http://technet.microsoft.com/zh-cn/library/system.double
http://www.jb51.net/article/36935.htm
最后贴个小白代码勿喷~哈:
#include <stdio.h>
int main()
{
int n,m;
double ans;
while(scanf("%d",&n)==1)
{
int sum=0;
for(int i=0;i<n;i++)
{
int temp;
scanf("%d",&temp);
sum+=temp;
}
scanf("%d",&m);
for(int i=0;i<m;i++)
{
int temp;
scanf("%d",&temp);
}
if(sum==0)
{
printf("0.00\n");continue;
}
if(n==m)
{
printf("inf\n");continue;
}
ans=(double)sum/(n-m);
printf("%.2lf\n",ans);
}
return 0;
}
记录几个没仔细看的网址:
http://book.51cto.com/art/201204/326994.htm