博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 10288 Coupons (分数模板)
阅读量:6864 次
发布时间:2019-06-26

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

大街上到处在卖彩票,一元钱一张。购买撕开它上面的锡箔,你会看到一个漂亮的图案。

图案有n种,如果你收集到所有n(n≤33)种彩票,就可以得大奖。

请问,在平均情况下,需要买多少张彩票才能得到大奖呢?

答案以带分数形式输出

 

例:当n=5时

思路简单,就是输出麻烦

#include
#include
#include
#include
using namespace std;const int maxn=500;struct fraction{ long long numerator; long long denominator; fraction() { numerator=0; denominator=1; } fraction(long long num) { numerator=num; denominator=1; } fraction(long long a,long long b) { numerator=a; denominator=b; this->reduction(); } void operator =(const long long num) { numerator=num; denominator=1; this->reduction(); } void operator=(const fraction b) { numerator=b.numerator; denominator=b.denominator; this->reduction(); } fraction operator + (const fraction b)const { long long gcdnum=__gcd(denominator,b.denominator); fraction tmp=fraction(numerator*(b.denominator/gcdnum)+b.numerator*(denominator/gcdnum),denominator/gcdnum*b.denominator); tmp.reduction(); return tmp; } fraction operator + (const int b)const { return ((*this)+fraction(b)); } fraction operator - (const fraction b)const { return ((*this)+fraction(-b.numerator,b.denominator)); } fraction operator - (const int b)const { return ((*this)-fraction(b)); } fraction operator * (const fraction b)const { fraction tmp=fraction(numerator*b.numerator,denominator*b.denominator); tmp.reduction(); return tmp; } fraction operator * (const int b)const { return ((*this)*fraction(b)); } fraction operator / (const fraction b)const { return ((*this)*fraction(b.denominator,b.numerator)); } void reduction() { if(numerator==0) { denominator=1; return; } long long gcdnum=__gcd(numerator,denominator); numerator/=gcdnum; denominator/=gcdnum; } void print() { if(denominator==1) { printf("%lld\n",numerator); } else { long long num=numerator/denominator; long long tmp=num; int len=0; while(tmp) { len++; tmp/=10; } for(int i=1;i<=len;i++) printf(" "); if(len) printf(" "); printf("%lld\n",numerator%denominator); if(num) printf("%lld ",num); tmp=denominator; while(tmp) { printf("-"); tmp/=10; } puts(""); for(int i=1;i<=len;i++) printf(" "); if(len) printf(" "); printf("%lld\n",denominator); } }}f[maxn];int main(){ int n; while(scanf("%d",&n)!=EOF) { f[0]=0; for(int i=1;i<=n;i++) f[i]=f[i-1]+fraction(1,i); f[n]=f[n]*n; f[n].print(); } return 0;}

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/6939785.html

你可能感兴趣的文章
是程序员,就用python导出pdf
查看>>
Absolute Uninstaller是类似于标准的Windows添加/删除卸载工具
查看>>
C++ Primer Plus(十)——对象和类
查看>>
ZooKeeper伪分布式集群安装及使用
查看>>
js 页面跳转保存状态
查看>>
轻松应对IDC机房带宽突然暴涨问题
查看>>
Mybatis Interceptor 讲解
查看>>
java mybatis向mysql数据库插入中文出现乱码
查看>>
linux用户和文件目录管理
查看>>
表空间数据结构研究_01
查看>>
mysql 编译安装
查看>>
使用KiWi Syslog Daemon构建日志服务器
查看>>
坐观 “爱情”
查看>>
linux apt-get proxy
查看>>
Spring学习总结1——bean的生命周期
查看>>
我的友情链接
查看>>
Apache Tomcat7+MySQL5.6配置
查看>>
char varchar nvarchar区别
查看>>
iOS原生定位和反编码
查看>>
华为交换机配置命令 华为QuidWay交换机配置命令手册
查看>>