确定正整数的所有三元组(a,b,c),使得每个数字:ab-c,bc-a,ca-b是2的幂。
如何通过回溯来解决这个问题?试过但没有成功..
答案 0 :(得分:0)
如果这是问题的确切定义,那么你就无法通过算法解决问题(至少,不是以虚拟的方式解决问题,比如回溯或蛮力),因为你不能#39;知道你的a,b,c参数的范围:你所知道的是它们是正整数,但那些是无限的!
如果有人告诉你:a,b,c都低于10 ^ 6,那么你可以这样做:
int limit = Math.pow(10, 6);
for (int a=1; a<=limit; a++) {
for (int b=1; b<=limit; b++) {
for (int c=1; c<=limit; c++) {
if (CONDITION_IS_MET) {
solutions.add(a, b, c);
}
}
}
}
在满足条件的情况下,对所有组合的测试为2的幂。您可以通过计算二进制表示中的1的数量来测试数字是否是2的幂:如果它恰好是1(或0),则它是2的幂:
boolean isPowerOfTwo(int n) {
String binary = Integer.toBinaryString(n);
int count = 0;
for (char c: binary.toCharArray()) {
count+= c=='1' ? 1 : 0;
}
return count<=1;
}
鉴于它来自数学奥运会,可能有一些方法可以将问题写成一个方程式系统或类似关系,从而为您提供答案。你试过了吗?