C++ 中的简化分数


假设我们有一个整数 n,我们需要找到 0 和 1(不包括 0 和 1)之间所有简化分数的列表,使得分母 <= n。这里分数可以按任意顺序排列。

因此,如果输入为 n = 4,则输出将为 ["1/2","1/3","1/4","2/3","3/4"],因为 "2/4" 不是简化分数,因为它可以简化为 "1/2"。

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个数组 ret

  • 初始化 i := 2,当 i <= n 时,更新(i 增加 1),执行:

    • 初始化 j := 1,当 j < i 时,更新(j 增加 1),执行:

      • c := i 和 j 的最大公约数

      • a := j / c

      • b := i / c

      • 将 (a 作为字符串连接 "/" 连接 b 作为字符串) 插入到 ret 的末尾

  • 返回 ret 中所有唯一元素的数组

示例

让我们看看下面的实现,以便更好地理解:

实时演示

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<string> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<string> simplifiedFractions(int n) {
      vector<string> ret;
      for (int i = 2; i <= n; i++) {
         for (int j = 1; j < i; j++) {
            int c = __gcd(i, j);
            int a = j / c;
            int b = i / c;
            ret.push_back(to_string(a) + "/" + to_string(b));
         }
      }
      set<string> s(ret.begin(), ret.end());
      return vector<string>(s.begin(), s.end());
   }
};
main(){
   Solution ob;
   print_vector(ob.simplifiedFractions(4));
}

输入

4

输出

[1/2, 1/3, 1/4, 2/3, 3/4, ]

更新于: 2020年11月17日

279 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告