cqyz#p1123分数问题·解题报告
2017-10-28 22:53
162 查看
【问题描述】
给定两个分数(真分数或假分数) a/b,c/d,且满足 a/b < c/d,你的任务是求 a/b+c/d 的最简分数 和 求这两个分数的中间分数 x/y。中间分数x/y满足:
1、x,y 均为正整数;
2、a/b < x/y < c/d;
3、所有满足2式的(x,y)对中 x+y 最小。
【输入格式】
四个正整数:a, b, c, d 。
【输出格式】
第 1 行:输出a/b+c/d的最简分数。
第 2 行:输出中间分数x/y。
【输入样例】
【样例1】
1 4 1 2
【样例2】
9 10 14 15
【输出样例】
【样例1】
3/4
1/3
【样例2】
11/6
10/11
【数据范围】
0 < a,b,c,d < 100,000,000
【问题分析】
分数加减法模拟人工计算,均视作异分母分数进行同分分子相加后同时约掉分子分母的最大公因数既可以得到最简分数
a/b+c/d=(a*c+d*b)/b*d
2.对于中间分数的理解
a/b < x/y < c/d
==> a/b*y < x < c/d*y
由题
①x、y均为整数,所以x最小为 a/b*y +1
②x+y需要最小,因此y=1开始枚举,每次x=a/b*y +1,然后判断x < c/d*y
若满足,则同时符合以上两个条件,则输出所得x、y
【代码细节】
虽然由数学可推出 a/b*y < x < c/d*y,然而因为计算机对与‘/’的规则的定义,因此不能用a/b*y,需要a*1.0,否则会出现x=1/3*y=0的情况;
同样,对于x < c/d*y的判断,直接比会有精度损失,这就可以直接利用分数比大小的方法–>交叉相乘法
Writtrn By Mr.Shadow from CQYZ
给定两个分数(真分数或假分数) a/b,c/d,且满足 a/b < c/d,你的任务是求 a/b+c/d 的最简分数 和 求这两个分数的中间分数 x/y。中间分数x/y满足:
1、x,y 均为正整数;
2、a/b < x/y < c/d;
3、所有满足2式的(x,y)对中 x+y 最小。
【输入格式】
四个正整数:a, b, c, d 。
【输出格式】
第 1 行:输出a/b+c/d的最简分数。
第 2 行:输出中间分数x/y。
【输入样例】
【样例1】
1 4 1 2
【样例2】
9 10 14 15
【输出样例】
【样例1】
3/4
1/3
【样例2】
11/6
10/11
【数据范围】
0 < a,b,c,d < 100,000,000
【问题分析】
分数加减法模拟人工计算,均视作异分母分数进行同分分子相加后同时约掉分子分母的最大公因数既可以得到最简分数
a/b+c/d=(a*c+d*b)/b*d
void plus1(long long a,long long b,long long c,long long d)//为了避免计算过程中溢出,于是统一都为long long { long long x,y; y=b*d;x=a*d+b*c; long long l=gcd(x,y); y/=l;x/=l; cout<<x<<'/'<<y<<endl; }
2.对于中间分数的理解
a/b < x/y < c/d
==> a/b*y < x < c/d*y
由题
①x、y均为整数,所以x最小为 a/b*y +1
②x+y需要最小,因此y=1开始枚举,每次x=a/b*y +1,然后判断x < c/d*y
若满足,则同时符合以上两个条件,则输出所得x、y
【代码细节】
虽然由数学可推出 a/b*y < x < c/d*y,然而因为计算机对与‘/’的规则的定义,因此不能用a/b*y,需要a*1.0,否则会出现x=1/3*y=0的情况;
同样,对于x < c/d*y的判断,直接比会有精度损失,这就可以直接利用分数比大小的方法–>交叉相乘法
long long p,q;//p分母q分子 for(p=1;;p++) { long long x=a*1.0/b*p; q=x+1; if(q*d<c*p){//交叉相乘法比大小 cout<<q<<'/'<<p; return 0; } }
Writtrn By Mr.Shadow from CQYZ
相关文章推荐
- 九度OJ 1104 整除问题解题报告
- 迷宫问题 解题报告
- 【原】 POJ 3517 And Then There Was One Joseph问题 解题报告
- 贪心算法解汽车加油问题——算法解题报告
- Tour-Guide解题报告 - 哈密尔顿环问题
- LeetCode解题报告--2Sum, 3Sum, 4Sum, K Sum求和问题总结
- timus 1052. Rabbit Hunt URAL 解题报告 多点共线问题
- 【九度OJ】题目1153:括号匹配问题 解题报告
- Coyouth 1583 问题 G: Enclosure Plan 解题报告
- 【解题报告】 POJ 1556 The Doors -- 最短路问题 Dijkstra算法 + 直线相交
- 核电站问题 解题报告
- 最大子列和问题 (25分) 解题报告
- 最佳调度问题 解题报告
- 动态规划解乘法表问题——算法解题报告
- 百练2750:鸡兔同笼问题解题报告
- 洛谷1023 税收与补贴问题 解题报告
- codevs 1231 最优布线问题 并查集 解题报告
- PAT 银行排队问题之单窗口“夹塞”版 (队列+模拟) -- 解题报告
- cojs 简单的区间问题 解题报告
- (解题报告)POJ3664---Election Time---用结构体实现两组相关联数据的排序问题