4

我需要对此代码进行一些解释。这是别人给出的示例代码。

    for ( int i = 1; i <= 8; i++ )
    {
        if(check % 2 == 0)
            sum += i;
        else
            sum -= i;
        check /= 2;            <--- Need explanation for this line.
    }

但在 中Pseudo code,没有check /= 2;程序。

这里是完整的Pseudo code

int binary = 0;
int sum;

while(binary<256)
sum = 0;
for(go through all 8 digits)
    if the i-th digit is 0
        sum += i
    if the i-th digit is 1
        sum -= i
end for

if sum == 0
    output

binary++
end while

那么,那行代码的目的是什么?

因为sum,binarycheck被初始化为0

我使用上面给出的伪代码编写了这段代码。但似乎我的代码会重复输出和另一个问题,即格式。

我希望输出是这样的格式:

Enter a number : 3

-1 -2 +3 = 0
1 +2 -3 = 0 

但我目前的输出是:

Enter a number : 3

-1 -2 3 = 0
1 2 -3 = 0

这是我的代码:

CODE IS REMOVED!

解决了!

我过于关注for输出部分的 -loop,因此错过了while二进制的 -loop,因为伪代码适用于 256 种可能的解决方案,因此,前面部分将有相同的输出,例如:

1 - 2 - 3 + 4 = 0                             

1 - 2 - 3 + 4 + 5 - 6 - 7 + 8 = 0

因此,伪代码可以给出相同的输出。所以,由于解决方案是2 ^ nwheren = 1, 2, 3, ...形式,所以改变

 while( binary < 256 )   --->     while ( binary < Math.pow(2, input))

应该解决它。

解决了答案的格式和重复。

4

4 回答 4

5

这是方法go through all digits。最右边的数字由 检索check % 2,检查后,您将check一位数字(位)向右移动check /= 2(等于check = check / 2;

于 2012-04-12T07:42:15.610 回答
1

使用此算法,您可以计算所有设置为1和设置为的位0

check /= 2;

它像是

check = check / 2;

你可以用它把所有位右移一位。例如:

(binary) 101 / (decimal) 2 = (binary) 10

101右移一位。

于 2012-04-12T07:50:53.937 回答
1

让我们看看这一行:

check /= 2;

在 Java 中,它等价于以下简单语句:

check = check / 2;

现在让我们找出它背后的目的:

  1. 最右边的数字由check % 2
  2. 然后将其右移一位check /= 2
于 2012-04-12T08:05:04.103 回答
0

check /= 2 等价于 check = check / 2;

它只是将多个分配组合成一个的一种方式,例如 sum += 2 等价于 sum = sum + 2;

于 2012-04-12T07:45:40.883 回答