我需要对此代码进行一些解释。 这是其他人给出的示例代码。
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
,binary
和check
初始化为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
- 循环,因此错过了二进制的while
- 循环,因为伪代码用于256种可能的解决方案,因此,将会有前部的输出相同,例如:
1 - 2 - 3 + 4 = 0
1 - 2 - 3 + 4 + 5 - 6 - 7 + 8 = 0
因此,伪代码可以给出相同的输出。因此,由于解决方案位于2 ^ n
n = 1, 2, 3, ...
形式,因此请更改
while( binary < 256 ) ---> while ( binary < Math.pow(2, input))
应该解决它。
解决了答案的格式和副本。
答案 0 :(得分:5)
这是go through all digits
的方法。最正确的数字由check % 2
检索,检查后,您将check
一位数(位)向右移check /= 2
(等于check = check / 2;
)
答案 1 :(得分:1)
使用此算法,您将所有位设置为1
并设置为0
。
check /= 2;
就像
check = check / 2;
您可以使用它将所有位右移一个。 例如:
(binary) 101 / (decimal) 2 = (binary) 10
即101
向右移一位数。
答案 2 :(得分:1)
让我们来看看这一行:
check /= 2;
在Java中,它等同于以下简单语句:
check = check / 2;
现在让我们找出它背后的目的:
check % 2
check /= 2
答案 3 :(得分:0)
check / = 2相当于check = check / 2;
它只是一种将多个赋值组合成一个赋值的方法,如sum + = 2等于sum = sum + 2;