对上述代码进行讲解
时间: 2023-07-09 07:23:35 浏览: 80
这段代码实现了对于输入的每个正整数 $n$,求解所有分母小于等于 $n$ 的最简分数,分数以任意顺序返回。下面是代码的讲解:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 求最大公约数
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
// 获取所有分母小于等于 n 的最简分数
vector<pair<int, int>> getFractions(int n) {
vector<pair<int, int>> res; // 存储最简分数的数组
for (int i = 2; i <= n; i++) { // 枚举分母 i
for (int j = 1; j < i; j++) { // 枚举分子 j
if (gcd(i, j) == 1) { // 判断是否为最简分数
res.push_back({j, i}); // 存储最简分数
}
}
}
return res;
}
int main() {
int n;
while (cin >> n && n != 0) { // 循环读入每个正整数
vector<pair<int, int>> res = getFractions(n); // 求解最简分数
for (auto p : res) { // 遍历最简分数数组
cout << p.first << "/" << p.second << " "; // 输出最简分数
}
cout << endl;
}
return 0;
}
```
其中,`gcd()` 函数用于求两个整数的最大公约数,`getFractions()` 函数用于获取所有分母小于等于 $n$ 的最简分数。在 `getFractions()` 函数中,我们首先定义了一个存储最简分数的数组 `res`,然后枚举分母 $i$,再枚举分子 $j$,判断 $i$ 和 $j$ 是否互质,如果是,则将 $j$ 和 $i$ 组成一个最简分数存入数组中。最后返回存储最简分数的数组 `res`。
在 `main()` 函数中,我们循环读入每个正整数 $n$,然后调用 `getFractions()` 函数求解所有分母小于等于 $n$ 的最简分数,最后遍历最简分数数组输出所有的最简分数。
阅读全文