【问题标题】:Calculating Combinations for a 7 digit binary number计算 7 位二进制数的组合
【发布时间】:2013-04-04 18:45:34
【问题描述】:

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

【问题讨论】:

  • 当您说“它不起作用”时,请更具体地说明您的意思。您可能希望在调试器中单步执行代码。这应该会立即揭示一个问题。
  • 而不是提供代码表达示例,说明 “7 位二进制数的组合”是什么意思
  • 一个明确的错误是for (int o = 0; 0 &lt; 2; o++) 行。 0 &lt; 2 始终为真 -> 无限循环。我们从中学到不要使用o 作为变量名,因为它很容易与0 混淆。
  • @halex 很好地证明了使用好的变量名的原因,或者至少是从不使用l (el)(是一个???)或o (oh)作为变量名的原因。

标签: c# for-loop combinations


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    我猜这不会像预期的那样工作:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 编程新手。不知道递归解决方案。我所知道的 id for loop。
      • 另外,我不明白你是如何计算总和的。怎么64?
      • 有 128 个 7 位的“二进制数”。对于给定的位置,一半有 0,一半有 1 在那个位置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      • 2012-10-11
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2015-08-31
      相关资源
      最近更新 更多