-4

7 桁の数字のすべての組み合わせを計算しようとしています。各桁は基本的に 2 つの値を占めることができるため、2 進数と呼んでいます。

数字は 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++)

条件は のo代わりに使用する必要があり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 個の可能な数すべての合計を知るためにすべての可能性を生成する必要はありません。各 2 進数 (0 または 1) が各スロットで正確に 64 回発生することに注意してください。したがって、合計は、配列内の 14 個の float の合計の 64 倍になります。

于 2013-04-04T18:53:25.790 に答える