C++请设计算法,求解一个整数n(1<n<=100)返回所有0到1之间(不包括 0和1)满足分母小于等于n的最简分数,分数可以以任意顺序返回。 用结构化程序设计方法编程验证算法的正确性。 输入格式:输入若干个正整数,最后以0结束,输入数据之间由一个空格分隔。 输出格式:每行输出对应输入中每个整数对应的计算结果,每个最简分数之间以空格符隔开。
时间: 2024-02-27 18:53:28 浏览: 92
下面是算法的实现代码,使用了辗转相除法求最大公约数来简化分数:
```c++
#include <iostream>
#include <vector>
using namespace std;
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a%b);
}
int main() {
int n;
vector<pair<int, int>> ans;
while (cin >> n && n != 0) {
ans.clear();
for (int i = 1; i < n; i++) {
if (gcd(i, n) == 1) {
ans.push_back(make_pair(i, n));
}
}
for (int i = 0; i < ans.size(); i++) {
cout << ans[i].first << "/" << ans[i].second << " ";
}
cout << endl;
}
return 0;
}
```
对于输入的每个整数n,我们遍历分子i从1到n-1,对于每个i,如果与n互质,则将它和n组成一个最简分数存入答案数组中。最后遍历答案数组输出所有的最简分数即可。
下面是使用样例进行测试的结果:
输入:
```
3 5 7 0
```
输出:
```
1/3 2/3
1/5 2/5 3/5 4/5
1/7 2/7 3/7 4/7 5/7 6/7
```
阅读全文