-4

我正在尝试计算 7 位数字的所有组合。每个数字基本上可以占据两个值,这就是我称它为二进制数的原因。

数字由 FNMSDPL 表示。基本上我想要所有值的组合及其总和。

我写了下面的代码,但它不起作用。

        F[0] = 9.29;
        F[1] = -4.47;
        N[0] = 9.64;
        N[1] = -5.77;
        M[0]= -7.48;
        M[1] = -2.13;
        S[0] = 25.85;
        S[1]= -3.55;
        D[0]= 12.14;
        D[1] = -4.90;
        P[0] = 8.65;
        P[1]= -0.85;
        L[0] = 9.14;
        L[1]= -1.73;
        for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                for (int k = 0; k < 2; k++)
                {
                    for (int l = 0; l < 2; k++)
                    {
                        for (int m = 0; m < 2; m++)
                        {
                            for (int n = 0; n < 2; n++)
                            {
                                for (int o = 0; 0 < 2; o++)
                                {
                                    double  count = F[i] + M[j] + L[k] + S[l] + D[m] + P[n] + L[o];
                                    System.Console.WriteLine(count);
                                }
                            }
                        }
                    }
                }
            }
        } 

错误信息:

指数数组的边界之外。

我在“double count =”行收到上述错误。

4

3 回答 3

3

Stack Overflow 上的字体选择可能已经解决了这个问题

for (int o = 0; 0 < 2; o++)

条件应该是 usingo而不是0. (提示:避免使用oorO作为变量名。)

编辑:这里的另一个问题(应该是递增l,而不是k):

for (int l = 0; l < 2; k++)
于 2013-04-04T18:49:54.590 回答
2

我想这不会按预期工作:

for (int l = 0; l < 2; k++)
于 2013-04-04T18:50:29.337 回答
1

您可能应该使用比 7 个嵌套for循环更聪明的东西(因为正如其他答案所指出的那样,这非常容易出错,尤其是当您必须组成 14 个变量名时)。递归解决方案在这里会做得很好。

至于总和,您无需生成所有可能性即可知道所有 128 个可能数字的总和。观察每个二进制数字(0 或 1)在每个槽中恰好出现 64 次,因此总和仅为数组中 14 个浮点数之和的 64 倍。

于 2013-04-04T18:53:25.790 回答