简化容器内部的比例

-2 c++ c++17

假设给定一个比率容器,并且您想将比率简化为最低整数。

输入:

std::vector<int> v1 = { 10, 20 , 30, 40 };
Run Code Online (Sandbox Code Playgroud)

输出:

1,2,3,4
Run Code Online (Sandbox Code Playgroud)

如何解决n个大小的容器呢?我正在寻找通用解决方案,该解决方案适用于任何数量的元素和任何整数值。

Ker*_*g73 7

反复应用于std::gcd向量中的所有数字以找到所有数字的gcd,然后将每个元素除以gcd。

const int gcd = std::reduce(v1.cbegin(), v1.cend(), 1, [](int a, int b) {
  return std::gcd(a, b);
});
if (gcd != 1) {
  for (int &elem : v1) {
    elem /= gcd;
  }
}
Run Code Online (Sandbox Code Playgroud)