Я думаю, что некоторые lcm s и gcd s могут решить эту проблему.
Идея состоит в том, чтобы получить lcm всех элементов , затем умножьте все элементы на это lcm и возьмите целое число gcd всех этих новых элементов. Затем просто разделите каждый элемент на gcd и напечатайте.
#include <bits/stdc++.h>
using namespace std;
float mod(float a, float b){
return a - b * floor(a / b);
}
float gcd(float a, float b){
if(b == 0) return a;
return gcd(b, mod(a, b));
}
float lcm(float a, float b){
return (a * b) / gcd(a, b);
}
int intGcd(int a, int b){
if(b == 0) return a;
return gcd(b, a % b);
}
int main(){
float v[3] = {7.5, 10.0, 30.0};
float lcmAll = 1;
for(int i = 0; i < 3; i++){
lcmAll = lcm(lcmAll, v[i]);
}
int gcdAll = (int) round(lcmAll * v[0]);
for(int i = 0; i < 3; i++){
v[i] = round(lcmAll * v[i]);
gcdAll = intGcd(gcdAll, (int) v[i]);
}
for(int i = 0; i < 3; i++){
cout<<(int) (v[i] / gcdAll)<<" ";
}
cout<<endl;
return 0;
}
output: 3 4 12