我在大学里被分配了一个作业,我们必须解决以下问题:
在这个问题中,我们考虑在给定正整数n的情况下,形式为n = 1 ± 2 ± 3 ± 4 ± ... ± n − 2 ± n − 1 ± n
例如,对于n = 5,以下两个表达式是该形式的唯一有效表达式:5 = 1 + 2 + 3 + 4 − 5
5 = 1 − 2 − 3 + 4 + 5
编写一个程序,在其输入上接受整数n(其中0
现在我知道我应该寻找一个带有循环和递归的二叉树。但是我们对指针还没有做很多事情,我真的不知道从哪里开始或如何建立这样的二叉树。也许有一个窍门,程序不必太复杂,但是我没有找到快捷方式。有什么建议么?
最佳答案
我感觉很慷慨。我不会为您提供递归的答案,而我将使用位冲击,因此,如果您能自己弄清楚并将其更改为递归,我想您将学到足够多的知识,不会欺骗自己。如果您确实抄袭了这个动词,您的教授就会知道您被骗了。
int n = 5;
int i,j,c;
for (i=0;i<(1<<n);i++)
{
c = 0;
for (j=1;j<=n;j++)
{
if (i&(1<<(j-1))) {c+=j; printf("+%d",j); }
else { c-=j; printf("-%d",j); }
}
if (c == n) printf(" = %d\n",n);
else printf(" != %d\n",n);
}
输出为:
-1-2-3-4-5 != 5
+1-2-3-4-5 != 5
-1+2-3-4-5 != 5
+1+2-3-4-5 != 5
-1-2+3-4-5 != 5
+1-2+3-4-5 != 5
-1+2+3-4-5 != 5
+1+2+3-4-5 != 5
-1-2-3+4-5 != 5
+1-2-3+4-5 != 5
-1+2-3+4-5 != 5
+1+2-3+4-5 != 5
-1-2+3+4-5 != 5
+1-2+3+4-5 != 5
-1+2+3+4-5 != 5
+1+2+3+4-5 = 5
-1-2-3-4+5 != 5
+1-2-3-4+5 != 5
-1+2-3-4+5 != 5
+1+2-3-4+5 != 5
-1-2+3-4+5 != 5
+1-2+3-4+5 != 5
-1+2+3-4+5 = 5
+1+2+3-4+5 != 5
-1-2-3+4+5 != 5
+1-2-3+4+5 = 5
-1+2-3+4+5 != 5
+1+2-3+4+5 != 5
-1-2+3+4+5 != 5
+1-2+3+4+5 != 5
-1+2+3+4+5 != 5
+1+2+3+4+5 != 5