本文共 1227 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要将支持人数A和反对人数B的比例A:B化简为A':B',使得A'和B'不超过给定的上限L,并且A'和B'互质。同时,我们需要确保化简后的比例尽可能接近原比例,并且乘积A'B'尽可能接近A*B。
#includeusing namespace std;int a, b, l, best_a, best_b;double ratio = (double)a / b;double min_diff = 1e9;for (int i = 1; i <= l; ++i) { for (int j = 1; j <= l; ++j) { if (gcd(i, j) != 1) continue; double current_ratio = static_cast (i) / j; double diff = abs(current_ratio - ratio); if (diff < min_diff) { min_diff = diff; best_a = i; best_b = j; } else if (diff == min_diff) { if (static_cast (i) / j > ratio) { best_a = i; best_b = j; } } }}cout << best_a << " " << best_b;
这种方法确保了我们找到一个尽可能接近原比例且满足条件的化简比例。
转载地址:http://lisb.baihongyu.com/