479 次浏览
在这里我们将看到,如果一个数字在其二进制表示中具有相邻的置位比特。假设数字 12 具有两个连续的 1(12 = 1100)。要检查这种类型的数字,思路非常简单。我们将数字右移 1 位,然后进行按位与运算。如果按位与运算结果非零,则必须存在一些连续的 1。示例 在线演示#include using namespace std; bool hasConsecutiveOnes(int n) { if((n & (n >> 1)) == 1){ return true; }else{ return false; } } int main() { int num = 67; //1000011 if(hasConsecutiveOnes(num)){ cout
210 次浏览
在本节中,我们将检查一个数字是否具有相同数量的置位比特和未置位比特。假设存在数字 12。其二进制表示为 1100。它具有相同数量的 0 和 1。方法很简单。我们将检查数字的每个比特,如果它是 1,则增加 set_bit_count,如果它是 0,则增加 unset_bit_count。最后,如果它们相同,则返回 true,否则返回 false。示例 在线演示#include using namespace std; bool hasSameSetUnset(int n) { int set_count = 0, unset_count = 0; while(n){ if((n & ... 阅读更多
138 次浏览
在本节中,我们将看到一个数字是否可以表示为三个连续数字的和。假设一个数字是 27。它可以表示为 8 + 9 + 10。这可以通过两种不同的方法解决。第一种方法是朴素方法。在这种方法中,我们必须检查 i + (i + 1) + (i + 2) 是否等于数字。另一种有效的方法是检查数字是否可被 3 整除。假设一个数字 x 可以表示为三个连续的 1,则 x = (y - 1) ... 阅读更多
242 次浏览
在这里我们将看到,如果我们可以将一个数字表示为两个非零 2 的次幂的和。因此,我们将检查给定的数字 N 是否可以表示为 (2x + 2y),其中 x、y > 0。假设一个数字是 10,它可以表示为 23 + 21。方法很简单。有两种情况。如果数字 n 是偶数,它可以表示为 2x。其中 x > 0。另一种情况是,如果 N 是奇数,它永远不能表示为 2 的次幂的和。我们不能使用 0 作为幂,所以 ... 阅读更多
129 次浏览
在本节中,我们将看到我们是否可以将一个数字表示为两个三角形数的和。三角形数如下所示:从示例中,我们可以看到 1、3、6、10 是一些三角形数。我们需要将一个数字 N(例如 16)表示为两个三角形数(6、10)的和。方法非常简单。我们必须获取所有小于 N 的三角形数。从这些值中形成一个集合。现在,我们必须从集合中取一个数字 X,并检查 N – X 是否存在于 ... 阅读更多
157 次浏览
在这里,我们将检查我们是否可以将一个数字表示为幂,例如 xy 还是否。假设存在一个数字 125。它可以表示为 53。另一个数字 91 不能表示为某个整数值的幂。算法isRepresentPower(num):开始 如果 num = 1,则返回 true 对于 i := 2,i2
146 次浏览
在这里,我们将检查我们是否可以将一个数字表示为幂,例如 ab 还是否。假设存在一个数字 125。它可以表示为 53。另一个数字 91 不能表示为某个整数值的幂。算法isRepresentPower(num):开始 如果 num = 1,则返回 true 对于 i := 2,i2
294 次浏览
在这里,我们将检查我们是否可以将一个数字表示为 ab 还是否。假设存在一个数字 125。它可以表示为 53。另一个数字 91 不能表示为某个整数值的幂。算法isRepresentPower(num):开始 如果 num = 1,则返回 true 对于 i := 2,i2
377 次浏览
在这里,我们将看到一个数字是否可以表示为两个或多个连续数字的和。假设一个数字是 12。它可以表示为 3+4+5。有一个直接且最简单的方法来解决这个问题。如果一个数字是 2 的幂,则它不能表示为一些连续数字的和。有两件事我们必须牢记。两个连续数字的和是奇数,则其中一个为奇数,另一个为偶数。第二个事实是 2n = 2(n-1) + 2(n-1)。示例 在线演示#include using namespace std; ... 阅读更多
111 次浏览