2025年杭州市中小学生科技界·计算机编程活动 C++ Python 编程代码模块挑战赛 高中组 题目 1.分数(回忆版)

作者回忆,大多数可能不准确

题目描述

N个分数,需要以p/q的格式输出N个分数之和的最简格式(如果结果为整数你需要输出p/1)
解释:假设n=3, 将会输入3个p,q,例如p=1, 2, 3 q=3, 2, 1(按顺序对应p/q) 计算的结果输出应当为13/3

输入格式

第一行为整数n
接下来n行,每行两个整数pq表示分数p/q(以空格间隔)

输出格式

1行, 为p/q代表计算结果

输入输出样例

样例#1

输入

1
2
3
4
3
1 3
2 2
3 1

输出

1
13/3

说明/提示

对于100%的数据, $2\le n\le10$, $1\le p,q\le10^{9}$


作者提供的题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#define MAX_N 10
#define int long long

using namespace std;

int n, nums[MAX_N][2];

int inline gcd(int a, int b) {
while (b) swap(a %= b, b);
return a;
}

int inline lcm(int a, int b) {
return a / gcd(a, b) * b;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for(int i = 0; i < n; i++)
cin >> nums[i][0] >> nums[i][1];
int q = nums[0][1];
for (int i = 0; i < n; i++) {
q = lcm(q, nums[i][1]);
}
int p = 0;
for (int i = 0; i < n; i++) {
p += nums[i][0] * (q / nums[i][1]);
}
if (p == q) {
cout << "1/1\n";
return 0;
}
int factory = gcd(p, q);
p /= factory;
q /= factory;
cout << p << "/" << q << "\n";
}