N个数求和——天梯赛题目重现
2017-02-21 16:38
274 查看
think:
1题目将基础的求最大公约数和最小公倍数的知识深层次展现,题目让N个数求和,而这N个数以分数形式输入,将分数加减法和求最小公倍数知识相融合,将分母的约分化简则巧妙融合求最大公约数的知识,还有输出情况的多样性,更需要细心和心态平和
5-1 N个数求和 (20分)
本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。
输入格式:
输入第一行给出一个正整数N(≤\le≤100)。随后一行按格式a1/b1 a2/b2 …给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。
输出格式:
输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。
输入样例1:
5
2/5 4/15 1/30 -2/60 8/3
输出样例1:
3 1/3
输入样例2:
2
4/3 2/3
输出样例2:
2
输入样例3:
3
1/3 -1/6 1/8
输出样例3:
7/24
hint:
2017-02-21 16:26 答案正确 20 5-1 gcc 14 1 16110501070
测试点结果 测试点 结果 得分/满分 用时(ms) 内存(MB) 要点提示
测试点1 答案正确 4/4 2 1 sample 1 和要约简,有负数,有整数部分
测试点2 答案正确 4/4 14 1 sample 2 输出整数
测试点3 答案正确 4/4 2 1 sample 3 只有分数部分
测试点4 答案正确 3/3 2 1 若不随时化简,则会溢出;输出为负数
测试点5 答案正确 3/3 5 1 输出负整数
测试点6 答案正确 2/2 5 1 最大N,结果为0
以下为accepted代码
1题目将基础的求最大公约数和最小公倍数的知识深层次展现,题目让N个数求和,而这N个数以分数形式输入,将分数加减法和求最小公倍数知识相融合,将分母的约分化简则巧妙融合求最大公约数的知识,还有输出情况的多样性,更需要细心和心态平和
5-1 N个数求和 (20分)
本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。
输入格式:
输入第一行给出一个正整数N(≤\le≤100)。随后一行按格式a1/b1 a2/b2 …给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。
输出格式:
输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。
输入样例1:
5
2/5 4/15 1/30 -2/60 8/3
输出样例1:
3 1/3
输入样例2:
2
4/3 2/3
输出样例2:
2
输入样例3:
3
1/3 -1/6 1/8
输出样例3:
7/24
hint:
2017-02-21 16:26 答案正确 20 5-1 gcc 14 1 16110501070
测试点结果 测试点 结果 得分/满分 用时(ms) 内存(MB) 要点提示
测试点1 答案正确 4/4 2 1 sample 1 和要约简,有负数,有整数部分
测试点2 答案正确 4/4 14 1 sample 2 输出整数
测试点3 答案正确 4/4 2 1 sample 3 只有分数部分
测试点4 答案正确 3/3 2 1 若不随时化简,则会溢出;输出为负数
测试点5 答案正确 3/3 5 1 输出负整数
测试点6 答案正确 2/2 5 1 最大N,结果为0
以下为accepted代码
#include <stdio.h> #include <string.h> struct node { long long fz; long long fm; }fs[104], ans; long long ys(long long n, long long m)//求最大公约数 { long long t, r; if(n < m) { t = n; n = m; m = t; } while(m) { r = n%m; n = m; m = r; } return n; } long long bs(long long n, long long m)//求最小公倍数 { long long x = ys(n, m); long long t = (n*m); return t/x; } int main() { int N, i; long long x, y, z, sum; scanf("%d", &N); for(i = 0; i < N; i++) { scanf("%lld/%lld", &fs[i].fz, &fs[i].fm); } ans.fm = 1, ans.fz = 0, sum = 0; for(i = 0; i < N; i++) { x = bs(ans.fm, fs[i].fm);//求累加记录的结构体变量的分母和新的累加数的结构体变量的分母的最小公倍数 y = ans.fz*(x/ans.fm) + fs[i].fz*(x/fs[i].fm);//求分子进行加减法操作结果 ans.fm = x;//分母更新 ans.fz = y;//分子更新 sum += ans.fz/ans.fm;//整数部分 ans.fz = ans.fz%ans.fm;//分数部分分子更新 z = ys(ans.fz, ans.fm);//化简 ans.fz /= z;//化简 ans.fm /= z;//化简 } if(ans.fz != 0 && sum != 0) printf("%lld %lld/%lld\n", sum, ans.fz, ans.fm); if(ans.fz == 0 && sum != 0) printf("%lld\n", sum); if(ans.fz != 0 && sum == 0) printf("%lld/%lld\n", ans.fz, ans.fm); if(ans.fz == 0 && sum == 0) printf("0\n"); return 0; }
相关文章推荐
- 题目22-素数求和问题
- 天梯赛并查集题目(排座位)
- 2013ACM/ICPC亚洲区南京站现场赛——题目重现
- 2013 ACM-ICPC吉林通化全国邀请赛——题目重现
- 2014上海全国邀请赛——题目重现 4.24
- L1-009 N个数求和 天梯赛
- PTA2016年天梯赛题目整理
- PAT 天梯赛 L1-009 N个数求和
- 团体程序设计天梯赛-练习集L1-009. *N个数求和
- hdu 5092 Seam Carving 2014上海全国邀请赛——题目重现
- C++ - PAT - L1-028. 判断素数(天梯赛决赛题目)
- 题目22: 素数求和问题
- 关于矩阵求和的常见算法//题目:n阶幻方矩阵验证
- 题目1051:数字阶梯求和
- 题目22-素数求和问题
- 题目1051:数字阶梯求和
- 题目1051:数字阶梯求和
- 上机题目(初级)-大数求和
- 天梯赛n个数求和
- BZOJ 题目3211: 花神游历各国(线段树区间减为平方根,区间求和)