设为首页 加入收藏

TOP

hdu 4153(数学)
2015-11-21 01:18:15 来源: 作者: 【 】 浏览:4
Tags:hdu 4153 数学

?
1x1+2/3+3/5+1/3x1/5+0x1/5+0.01可以看成为:3/3x5/5+2/3+3/5+1/3x1/5+0/3x1/5+0.01。
这样看起来更有规律,在两个分数乘积的中,一个分母是3,另外一个是5。先说为什么是5,从左边的图片可以看出在0-9范围的值最大,就是5。10-19中为3,而3又占5中的3/5。20-29中为1,1占5中的1/5,30-39为1,也占1/5。所以以为什么以5分母的分数就可以求出来了。再说3。。。3/3,2/3,1/3,0,/3正好分别对应0-9,10-19,20-29,30-39。3是由测试数据里面的最大数30除以图像的间距0-9这10个数等于3,因此确定了3是分母,分子再逐级递减。最后在最后的结果上面加上0.01,保留6位小数,就是最终的结果了。
?
[cpp]?
#include"stdio.h" ?
#include"string.h" ?
int main() ?
{ ?
? ? int n,m; ?
? ? int i; ?
? ? int a[101]; ?
? ? int mark[101]; ?
? ? int s1,s2; ?
? ? int max; ?
? ? while(scanf("%d%d",&n,&m)!=-1,n||m) ?
? ? { ?
? ? ? ? memset(mark,0,sizeof(mark)); ?
? ? ? ? max=0; ?
? ? ? ? for(i=0;i
? ? ? ? { ?
? ? ? ? ? ? scanf("%d",&a[i]); ?
? ? ? ? ? ? mark[a[i]/m]++; ?
? ? ? ? ? ? if(max
? ? ? ? } ?
? ? ? ? s2=max/m;//s2表示可以分的份数。。。 ?
? ? ? ? //s2++; ?
??
? ? ? ? max=0; ?
? ? ? ? for(i=0;i<=s2;i++) ?
? ? ? ? { ?
? ? ? ? ? ? if(mark[i]>max)//占份数最多。。 ?
? ? ? ? ? ? ? ? max=mark[i]; ?
? ? ? ? } ?
? ? ? ? s1=max; ?
??
??
? ? ? ? double ans; ?
? ? ? ? ans=0.01; ?
? ? ? ? for(i=0;i<=s2;i++) ?
? ? ? ? { ?
? ? ? ? ? ? ans+=(i*1.0/s2)*(mark[s2-i]*1.0/s1); ?
? ? ? ? } ?
? ? ? ? printf("%.6f\n",ans); ?
? ? } ?
? ? return 0; ?
} ?
?
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA 题目10010 - Where's Wal.. 下一篇zoj 3631 Watashi's BG

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: