1.4.44

1.4.44 #

解答 #

每生成一个随机数都和之前生成过的随机数相比较。

代码 #

var random = new Random();
const int n = 10000;
var a = new int[n];
var dupNum = 0;
int times;
for (times = 0; times < 500; times++)
{
    for (var i = 0; i < n; i++)
    {
        a[i] = random.Next(n);
        if (IsDuplicated(a, i))
        {
            dupNum += i;
            Console.WriteLine($"生成{i + 1}个数字后发生重复");
            break;
        }
    }
}

Console.WriteLine($"√(πN/2)={Math.Sqrt(Math.PI * n / 2.0)},平均生成{dupNum / times}个数字后出现重复");

// 检查是否有重复的数字出现。
static bool IsDuplicated(int[] a, int i)
{
    for (var j = 0; j < i; j++)
    {
        if (a[j] == a[i])
        {
            return true;
        }
    }

    return false;
}