1.1.36 #
解答 #
N 取到 1000 左右数据就比较明显了。
N = 1000, M = 10
代码 #
const int m = 10; // 数组大小
const int n = 1000; // 打乱次数
var a = new int[10];
var result = new int[m, m];
for (var i = 0; i < n; i++)
{
// 初始化
for (var j = 0; j < a.Length; j++)
{
a[j] = j;
}
// 打乱
Shuffle(a, i);
// 记录
for (var j = 0; j < m; j++)
{
result[a[j], j]++;
}
}
PrintMatrix(result);
static void Shuffle(int[] a, int seed)
{
var n = a.Length;
var random = new Random(seed);
for (var i = 0; i < n; i++)
{
var r = i + random.Next(n - i); // 等于StdRandom.uniform(N-i)
var temp = a[i];
a[i] = a[r];
a[r] = temp;
}
}
static void PrintMatrix(int[,] a)
{
for (var i = 0; i < a.GetLength(0); i++)
{
for (var j = 0; j < a.GetLength(1); j++)
{
Console.Write($"\t{a[i, j]}");
}
Console.WriteLine();
}
}