我在大学里被分配了一个作业,我们必须解决以下问题:

在这个问题中,我们考虑在给定正整数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

10-08 04:36