计算7位二进制数的组合

时间:2013-04-04 18:45:34

标签: c# for-loop combinations

我正在尝试计算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 =”行收到上述错误。

3 个答案:

答案 0 :(得分:3)

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

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

条件应该使用o而不是0。 (提示:避免使用oO作为变量名称。)

修改:此处的另一个问题(应该是l递增,而不是k):

for (int l = 0; l < 2; k++)

答案 1 :(得分:2)

我想这不会按预期工作:

for (int l = 0; l < 2; k++)

答案 2 :(得分:1)

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

至于总和,你不需要产生所有可能性来知道所有128个可能数字的总和。注意每个二进制数字(0或1)在每个插槽中恰好出现64次,因此总和只是数组中14个浮点数之和的64倍。