两个int型的数据相除结果会默认为int型,但如果其中有一个为double型结果就为double型,
所以:做强制类型转换 或 将其中一个数乘以1.0得到double型。
#include <iostream>
using namespace std;
bool func(int a, int b); //判断a、b是否互质
int main() {
int a, b, l; //分别表示支持人数、反对人数以及上限
cin >> a >> b >> l;
double c = (double)a / b; //即A/B
//double c = a * 1.0 / b;
cout << "c=" << c << endl;
double a1 = a > l ? l : a; //遍历起始值
double b1 = b > l ? l : b;
double min = INT_MAX;
int aa = a1, bb = b1; //最后的a与b
for (double i = a1;i > 0;i--) { //直接暴力
for (double j = b1;j > 0;j--) {
double temp = i / j;
if (temp >= c) {
if (func(i, j)) { //若互质
if (temp - c < min) { //更新
min = temp - c;
aa = i;
bb = j;
cout << "更新" << min << endl;
}
}
}
}
}
cout << aa << " " << bb;
return 0;
}
bool func(int a, int b) {
for (int i = 2;i <= a;i++) {
if (a % i == 0) { //是a的约数
if (b % i == 0) { //若也是b的约数
return false;
}
}
}
return true;
}