HDU—— 1099 Lottery
2014-11-02 14:59
323 查看
题意:Eddy的公司出了一种彩票,该彩票为一个系列,每个系列有N张且编号为1~N,当收集齐所有彩票后就能得到一种奖品,问平均需要买多少张才能集齐每个系列的N张彩票?ps:读题读的蛋疼,理解起来也很费劲。
解题思路:首先不管你买多少张,肯定能买中N张中的任意一张概率为N/N,接着能买中剩下N-1张当中的任意一张的概率为N-1/N,依次类推N-2/N、N-3/N......1/N,对每次的概率求倒数就是每买中一张彩票需要的平均彩票数,然后将所有倒数相加得:N(1+1/2+1/3+......+1/N-1+1/N),然后就是对该式子进行求解,详见代码。
Code:
解题思路:首先不管你买多少张,肯定能买中N张中的任意一张概率为N/N,接着能买中剩下N-1张当中的任意一张的概率为N-1/N,依次类推N-2/N、N-3/N......1/N,对每次的概率求倒数就是每买中一张彩票需要的平均彩票数,然后将所有倒数相加得:N(1+1/2+1/3+......+1/N-1+1/N),然后就是对该式子进行求解,详见代码。
Code:
#include <iostream> #include <cstdio> using namespace std; typedef long long LL; LL FenMu[25],FenZi[25]; LL gcd(LL x,LL y) { return y==0 ? x:gcd(y,x%y); } int main() { //freopen("input.txt","r",stdin); FenMu[1] = 1,FenZi[1] = 1; for(LL j = 2; j <= 22; j++)//采用递推思想,第i位的分母值是数值i与i-1位置的分母值的最小公倍数 { FenMu[j] = j*FenMu[j-1]/gcd(j,FenMu[j-1]);//两个数的最小公倍数等于两个数的乘积除以两个数的最大公约数 FenZi[j] = FenMu[j]/j+FenMu[j]/FenMu[j-1]*FenZi[j-1];//i位置的分子值FenZi[i]等于本位分子值FenMu[i]/i }//加上前一位分子值FenMu[i]/FenMu[i-1]*FenZi[i-1] LL N; while(~scanf("%I64d",&N)) { int len1 = 0,len2 = 0,len3 = 0; if(N*FenZi %FenMu == 0) printf("%I64d\n",N*FenZi /FenMu ); else { LL inter = N*FenZi /FenMu ; LL FZ = N*FenZi %FenMu , FM = FenMu ; LL factor = gcd(FZ,FM);//分数部分要化简 FZ /=factor, FM /=factor;//化简 LL n1 = inter, n2 = FM; while(n1) {len1++; n1 /=10;} while(n2) {len2++; n2 /=10;} for(int i = 0; i <= len1; i++) printf(" ");//输出格式处理 printf("%I64d\n",FZ); printf("%I64d ",inter);//整数部分与分数部分要有一个空格 for(int j = 0; j < len2; j++) printf("-"); printf("\n"); for(int k = 0; k <= len1; k++) printf(" "); printf("%I64d\n",FM); } } return 0; }
相关文章推荐
- HDU 1099 Lottery (数学问题模拟)
- hdu 1099 lottery
- hdu 1099 Lottery
- hdu 1099 Lottery
- hdu 1099 Lottery
- hdu1099 lottery 假分式 字符串函数 strncpy sprintf 函数 数字输入字符数组 公约数
- hdu 1099 Lottery
- hdu 1099 Lottery 解题分析
- HDU 1099 Lottery
- hdu 1000-1099计划(31)
- hdu 1000-1099计划(31)
- HDOJ HDU 1099 Lottery
- HDU1099————Lottery HDU(86)
- HDOJ 1099 Lottery
- hdu 1099 数学
- 【HDOJ】1099 Lottery
- hdu 1099(数学)
- HDU/HDOJ 1099 Lottery
- hdoj 1099 Lottery(期望)
- HDUOJ 1099——Lottery