您的位置:首页 > 其它

uva 10483(暴力)

2015-07-12 18:15 447 查看
题意:给出两个小数l,r,然后找到所有在[l,r]范围内的num满足

num = a + b + c = a * b * c

将结果从小到大输出。

题解:保证精度,将小数扩大100倍,枚举a,b,计算出c。

return x.sum < y.sum;
if (fabs(x.a - y.a) > 1e-9)
return x.a < y.a;
if (fabs(x.b - y.b) > 1e-9)
return x.b < y.b;
return x.c < y.c;
}

int main() {
while (scanf("%lf%lf", &l, &r) == 2) {
int ll = l * 100, rr = r * 100, cnt = 0;
for (int i = 1; i * i * i <= rr * 10000; i++)
for (int j = i; j * j * i <= rr * 10000; j++) {
if (i * j <= 10000 || ((i + j) * 10000) % (i * j - 10000))
continue;
int k = (i + j) * 10000 / (i * j - 10000);
if (k < j)
continue;
int sum = i + j + k;
int mul = i * j * k;
if (mul % 10000)
continue;
if (sum >= ll && sum <= rr && sum == mul / 10000) {
res[cnt].sum = sum / 100.0;
res[cnt].a = i / 100.0;
res[cnt].b = j / 100.0;
res[cnt++].c = k / 100.0;
}
}
sort(res, res + cnt, cmp);
for (int i = 0; i < cnt; i++)
printf("%.2lf = %.2lf + %.2lf + %.2lf = %.2lf * %.2lf * %.2lf\n", res[i].sum, res[i].a, res[i].b, res[i].c, res[i].a, res[i].b, res[i].c);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: