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):开始 if num = 1,则返回 true for i := 2,i2
146 次浏览
在这里,我们将检查我们是否可以将一个数字表示为幂,例如 ab 或其他形式。假设存在数字 125。这可以表示为 53。另一个数字 91 不能表示为某个整数值的幂。算法isRepresentPower(num):开始 if num = 1,则返回 true for i := 2,i2
294 次浏览
在这里,我们将检查我们是否可以将一个数字表示为 ab 或其他形式。假设存在数字 125。这可以表示为 53。另一个数字 91 不能表示为某个整数值的幂。算法isRepresentPower(num):开始 if num = 1,则返回 true for i := 2,i2
377 次浏览
在这里我们将看到,一个数字是否可以表示为两个或多个连续数字之和。假设一个数字是 12。这可以表示为 3+4+5。有一种直接且最简单的方法来解决这个问题。如果一个数字是 2 的幂,则它不能表示为一些连续数字之和。有两件事我们必须记住。两个连续数字的和是奇数,则其中一个是奇数,另一个是偶数。第二个事实是 2n = 2(n-1) + 2(n-1)。示例 在线演示#include using namespace std; ... 阅读更多
111 次浏览