给Jim一个整数n(1<n<=100),请Jim返回所有0到1之间(不包括 0和1)满足分母小于等于n的最简分数。分数可以以任意顺序返回。 请设计算法,求解上述问题。用结构化程序设计方法编程验证算法的正确性。 输入格式: 输入若干个正整数,最后以0结束,输入数据之间由一个空格分隔。 输出格式: 每行输出对应输入中每个整数对应的计算结果,每个最简分数之间以空格符隔开。C++
时间: 2024-01-24 21:17:43 浏览: 31
以下是C++代码实现:
```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;
while(cin >> n && n != 0){
vector<pair<int, int>> res; //记录结果
for(int i = 1; i < n; i++){
if(gcd(i, n) == 1){ //分子和分母互质
res.push_back({i, n});
}
}
for(int i = 0; i < res.size(); i++){
cout << res[i].first << "/" << res[i].second << " ";
}
cout << endl;
}
相关问题
给Jim一个整数n(1<n<=100),请Jim返回所有0到1之间(不包括 0和1)满足分母小于等于n的最简分数。分数可以以任意顺序返回。 C++
好的,以下是给出的 C++ 代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 求最大公约数
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
vector<pair<int, int>> getFractions(int n) {
vector<pair<int, int>> res;
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) {
if (gcd(i, j) == 1) {
res.push_back({j, i});
}
}
}
return res;
}
int main() {
int n;
cin >> n;
vector<pair<int, int>> res = getFractions(n);
for (auto p : res) {
cout << p.first << "/" << p.second << " ";
}
cout << endl;
return 0;
}
```
以上代码中,我们首先定义了一个 `getFractions()` 函数,用于返回所有满足条件的最简分数,其中我们使用两个循环枚举所有可能的分子和分母,然后判断它们是否互质,如果是则将该分数加入到结果数组中。
接下来在 `main()` 函数中,我们读入一个整数 `n`,然后调用 `getFractions()` 函数得到所有最简分数,最后输出即可。
注意:以上代码只是一种解法,不一定是最优解。
给Jim一个整数n(1<n<=100),请Jim返回所有0到1之间(不包括 0和1)满足分母小于等于n的最简分数。分数可以以任意顺序返回。 C++
以下是C++代码实现:
```c++
#include <iostream>
using namespace std;
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
int main() {
int n;
cin >> n;
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) {
if (gcd(i, j) == 1) {
cout << j << "/" << i << " ";
}
}
}
return 0;
}
```
首先输入一个整数n,然后循环遍历所有的分母i(从2到n),以及分子j(从1到i-1)。如果i和j的最大公约数为1,则输出它们的最简分数形式。其中gcd()函数是求最大公约数的辅助函数。