埃及分数
2016-06-24 21:36
232 查看
【问题描述】
在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。对于一个分数a/b,表示方法有很多种,但是哪种最好呢?首先,加数少的比加数多的好;其次,加数个数相同的,最小的分数越大越好;再次,满足上述条件的,字典序最小的最好。
如:
19/45=1/3 + 1/12 + 1/180
19/45=1/3 + 1/15 + 1/45
19/45=1/3 + 1/18 + 1/30
19/45=1/4 + 1/6 + 1/180
19/45=1/5 + 1/6 + 1/18
最好的是最后一种,因为1/18比1/180,1/45,1/30,1/180都大。
给出a,b(0
在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。对于一个分数a/b,表示方法有很多种,但是哪种最好呢?首先,加数少的比加数多的好;其次,加数个数相同的,最小的分数越大越好;再次,满足上述条件的,字典序最小的最好。
如:
19/45=1/3 + 1/12 + 1/180
19/45=1/3 + 1/15 + 1/45
19/45=1/3 + 1/18 + 1/30
19/45=1/4 + 1/6 + 1/180
19/45=1/5 + 1/6 + 1/18
最好的是最后一种,因为1/18比1/180,1/45,1/30,1/180都大。
给出a,b(0
program asdf; var t:boolean; ans,a:array[0..10000] of int64; i,s:longint; big,fz,fm,x,y:int64; function max(a,b:longint):longint; begin max:=a; if max<b then max:=b; end; function min(a,b:longint):longint; begin min:=a; if min>b then min:=b; end; procedure sss(k:longint); var i:longint; mmi,mma,sx,sy:int64; begin mmi:=max(a[k-1]+1,y div x); mma:=min(big-1,y*(s-k+1) div x); sx:=x; sy:=y; for i:=mmi to mma do begin x:=sx; y:=sy; x:=x*i-y; if x<0 then continue; y:=y*i; a[k]:=i; if k<>s then sss(k+1) else if (x=0)and(i<=big) then begin ans:=a; big:=i; t:=true; end; end; end; begin read(fz,fm); s:=0; big:=999999999; t:=false; while not t do begin inc(s); x:=fz; y:=fm; sss(1); if s>20 then break; end; for i:=1 to s do write(ans[i],' '); writeln; end.
相关文章推荐
- Android Parcelable的写法
- 备用交换机 双连通分量
- Socket长连接适配IPV4和Ipv6
- 移动混合开发之android文件管理-->flexbox,webFont。
- SHELL 编程
- phpcms 同步到发布站点,发布站点到远程FTP根目录
- 多线程控制、同步的几个实用的类
- Soot -- 路径问题
- 高精度进位制转换,Poj(1220)
- 【一天一道LeetCode】#100. Same Tree(100题大关)
- 【一天一道LeetCode】#100. Same Tree(100题大关)
- 刚看了一个学生用PY写的web聊天作业,写的不错,忍不住发一下。
- CSS权威指南-选择相邻兄弟元素
- 你真的了解OKR吗?
- AR模型(Autoregress)
- JAVA——对象的序列化Serializable
- JVM垃圾回收机制
- Learn Once ,Write Anywhere —— 从零开始学习React Native(一)搭建环境
- 专题四1002
- 前端团队技术分享(一)