|
■No74473 (なちゃ さん) に返信
偏りを検証
//--- 乱数発生用
Random rnd = new Random();
//--- 元の配列
int[] cards = (Enumerable.Range(0, 10)).ToArray();
int[,] cnt = new int[10, 10];
Array.Clear(cnt,0,cnt.Length);
for (int i = 0; i < 100; i++)
{
//--- シャッフルして新しい配列に格納
int[] cards2 = cards.OrderBy((r) => rnd.Next(100)).ToArray();
//--- 各数字の場所をカウント
for (int j = 0; j < cards2.Length; j++)
{
cnt[cards2[j], j]++;
}
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Console.Write("{0} ", cnt[i, j].ToString().PadLeft(4,' '));
}
Console.WriteLine();
}
Console.WriteLine();
結果:3回実行してみました。これが偏りとみるかは難しいところですが
気になるようなら前述のように10になったところでその場所でないところへ
移動するよう補正するとよいかと。
1回目:
7 6 14 9 10 10 13 11 12 8
12 8 6 14 8 12 7 10 12 11
10 9 7 12 12 10 11 8 13 8
10 9 10 9 8 9 10 14 12 9
11 16 10 13 8 13 6 7 7 9
6 14 13 6 10 4 17 8 12 10
14 9 16 8 11 6 10 12 3 11
11 10 10 8 10 12 7 11 8 13
9 9 5 12 10 16 7 8 13 11
10 10 9 9 13 8 12 11 8 10
2回目:
7 6 10 6 15 14 12 12 12 6
17 14 6 6 11 8 9 11 6 12
7 7 15 10 9 10 8 13 4 17
12 7 14 18 4 8 11 6 12 8
12 5 13 6 16 9 11 7 8 13
6 13 9 14 5 9 13 16 9 6
6 9 12 11 12 13 3 10 12 12
16 11 6 11 5 13 8 9 14 7
8 17 6 6 10 8 14 9 11 11
9 11 9 12 13 8 11 7 12 8
3回目:
12 6 9 7 8 10 18 13 7 10
7 9 14 14 8 12 9 9 9 9
12 6 8 18 11 10 6 9 11 9
7 7 6 9 9 10 14 12 16 10
13 9 14 12 10 12 9 9 7 5
14 9 9 6 14 9 8 5 8 18
11 7 10 7 10 12 7 14 9 13
7 14 13 9 7 9 11 9 11 10
8 13 8 11 10 9 10 10 11 10
9 20 9 7 13 7 8 10 11 6
|