【发布时间】:2013-02-14 10:22:19
【问题描述】:
一个完美的正方形被取为二进制,一些位被替换为“?”例如 1??,数字将是 4.(或 1????000???0000)
我需要找到那个完美的正方形。(只有这样可能的数字)
字符串中 '?' 的个数为 n
要找到这个数字,我正在做的是遍历 2**n 个数字(111,110,101,100)并检查它是否是一个完美的正方形。我正在使用以下函数来检查它是否是一个完美的正方形。
bool issqr(int n){
int d=(int)(sqrt(n));
if(d*d==n) return true;
else return false;
}
虽然我在 python 中做到了,但它需要很多时间,所以我转移到 C++,只使用位操作来填充 2**n 个数字(这比 python 版本快得多)
但如果数字超过 64 位,则会失败
如何避免这个问题?如果一个数字有 120 位,我怎么能做同样的事情。
(10100110???1?1?01?1?011000?1100?00101000?1?11001101100110001010111?0?1??0110?110?01?1100?1?0110?1?10111?01?0111000 ?10??101?01)
【问题讨论】:
-
除了最高位之外都被“?”替换了还是可以有更复杂的模式,例如
1??1??1? -
请添加一个120位的例子
-
这类问题的制定,使得蛮力是不合理的。它们需要数学简化和算法洞察力。