-3

70 問のテストで考えられる結果を計算しようとしています。それらはすべてブールです。それを行う方法と、実行する必要がある計算の数。

4

5 に答える 5

2

70 個の true/false 値のすべての組み合わせを実行する必要がある場合、それは約 2^70 = 1.18e21 = 1.18 セクスティリオンの組み合わせです。クロック サイクルごとに 1 つ実行できる場合、3 GHz の 4 コア マシンですべての解を計算するには 3000 年かかります。各結果を厚さ 0.1 mm の紙に 1 ページあたり 50 行で印刷すると、紙の束は 1 兆マイルを超える高さになります (1 マイルの高さの紙の束には 1,600 万枚以上のシートがあるという事実を考えるかもしれません)。 、重さ 72 トン、製造には 1000 本以上の木が必要です)。

この問題を分析する方法を再考します。

于 2012-11-19T16:19:59.033 に答える
0

それぞれの結果は true または false になる可能性があるため、合計で 2^70 の結果があります。(めちゃめちゃ多いです!)

すべての結果を列挙したい場合は、次のようにします。

IEnumerable<IEnumerable<bool>> EnumerateResults()
{
    var curr = new List<bool>();
    for (var idx = 0; idx < 3; idx++) curr.Add(false);
    while (!curr.All(v => v))
    {
        var idx = 0;
        // add one with carry
        while (curr[idx]) // no index OOB, because of while condition
        {
            curr[idx] = false;
            idx++;
        }
        curr[idx] = true;
        yield return new List<bool>(curr); // clone
    }
}
于 2012-11-19T16:20:59.737 に答える
0

true だった bool の量を取得したい場合は、それらが配列に格納されていると仮定して、それらをループします。

int score = 0;
for(int c = 0; c < boolArray.Length; c++)
{
    if(boolArray[c])
    {
        score++;
    }
}
// (Now you have the score)

私は C# にあまり詳しくないので、この正確なコードが機能するかどうかはわかりませんが、ポイントを理解する必要があります。

テストで得られるすべての可能性が必要な場合は、2 ^ 70 (2 は bool が 2 つの値しか保持しないため、70 は 70 個の bool があるため) です。

于 2012-11-19T16:19:10.077 に答える
0

おそらく、これをループまたは再帰的に実行したいと思うでしょう。

それが可能なテストの数であることを考えると、 2 70の計算を行う必要があります。

または、個々のパスを気にしない場合は、 70だけかもしれません。

于 2012-11-19T16:17:43.170 に答える
0

答えは簡単です。N サイズの 2 進数を扱っています。たとえば、4 問のテストには 16 の可能性があります

0000 0001 0010 0011

0100 0101 0110 0111

1000 1001 1010 1011

1100 1101 1110 1111

N の場合、ちょうど 2^N です

于 2012-11-19T16:22:43.143 に答える