重複の可能性:
ランダムな範囲を1–5から1–7に拡張します
私はここで質問を見ました:リンク
著者が提供した解決策は、同じ確率を生み出すようには見えませんでした。
たとえば、関数の10k回の呼び出しのうち4番目の数値が1〜2回返されました(2などの他の数値がそれぞれ約2k回返された場合)。
たぶん私は間違って理解したか、アルゴリズムを間違って書いたのかもしれませんが、ここでは:
static int rand5()
{
return new Random().Next(1, 6);
}
static int rand7()
{
while (true)
{
int num = 5 * (rand5() - 1) + rand5();
if (num < 22) return ((num % 7) + 1);
}
}
static void Main(string[] args)
{
int limit = 10000;
int[] scores = new int[7];
for (int i = 0; i < limit; i++)
{
scores[rand7() - 1]++;
}
foreach (int n in scores)
{
Console.Write(n + " ");
}
Console.WriteLine();
}
前もって感謝します。