使用rand5()生成rand7()(概率相同)

可能重复:
将随机范围从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(); } 

提前致谢。

你没有在Rand5中生成随机数。

像这样做:

 static Random rand = new Random() static int rand5() { return rand.Next(1, 6); }