博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
百事世界杯之旅
阅读量:4679 次
发布时间:2019-06-09

本文共 1457 字,大约阅读时间需要 4 分钟。

题目描述

“……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯。还不赶快行动!”

你关上电视,心想:假设有n个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢?

输入输出格式

输入格式:

整数n(2≤n≤33),表示不同球星名字的个数。

输出格式:

输出凑齐所有的名字平均需要买的饮料瓶数。如果是一个整数,则直接输出,否则应该直接按照分数格式输出,例如五又二十分之三应该输出为(复制到记事本):

3 5-- 20 第一行是分数部分的分子,第二行首先是整数部分,然后是由减号组成的分数线,第三行是分母。减号的个数应等于分母的为数。分子和分母的首位都与第一个减号对齐。

分数必须是不可约的。

输入输出样例

输入样例#1:
2
输出样例#1:
3 设f[i]为剩下i个球星的期望 f[i]=(i/n)f[i+1]+((n-i)/n)f[i]+1 移项: (i/n)f[i]=(i/n)f[i+1]+1 f[i]=f[i+1]+n/i 所以答案就是n∑(1/i)
1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 typedef long long lol; 8 lol n,p,q,r; 9 lol gcd(lol a,lol b)10 {11 if (!b) return a;12 return gcd(b,a%b);13 }14 int get_num(lol a)15 {16 int cnt=0;17 while (a)18 {19 a/=10;20 cnt++;21 }22 return cnt;23 }24 int main()25 {lol i;26 cin>>n;27 p=0;q=1;28 for (i=1;i<=n;i++)29 {30 p=p*i+q*n;31 q=q*i;32 r=gcd(p,q);33 p/=r;34 q/=r;35 }36 int r=p/q;37 p%=q;38 if (p==0)39 printf("%d\n",r);40 else41 {42 int s=get_num(r);43 int s1=get_num(p),s2=get_num(q);44 for (i=1;i<=s;i++)45 cout<<' ';46 cout<

<

 

转载于:https://www.cnblogs.com/Y-E-T-I/p/8308553.html

你可能感兴趣的文章
C# 实现拨号重连
查看>>
使用Java 编写FTP中的长传文件和下载文件
查看>>
快速求积,快速求幂,大指数取模
查看>>
Mathematica查看内部定义
查看>>
python配置opencv实现人脸检测
查看>>
bzoj 4197: [Noi2015]寿司晚宴【状压dp】
查看>>
洛谷 P2754 星际转移问题【最大流】
查看>>
总结docker常用命令
查看>>
C++模板类不同类型的转换
查看>>
阿里云分布式关系数据库DRDS笔记
查看>>
构建之法阅读笔记06
查看>>
(7)如何得到所有的 "水仙花数" ?
查看>>
洛谷P3527 [POI2011]MET-Meteors [整体二分]
查看>>
Redis学习笔记11--Redis分布式
查看>>
NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译
查看>>
pydev安装
查看>>
js中arr.sort的用法
查看>>
LoadRunner录制不弹出IE浏览器,event=0
查看>>
android N刷机
查看>>
第六周作业 :软件项目管理学习小结
查看>>