무작위로 사용하는 것은 DateTime.Now에서 파생 된 시드로 초기화됩니다.이 숫자를 사용하여 0과 4 사이의 숫자를 생성합니다 (제외됨). 그래서 동일한 숫자를 얻을 시간의 25 %가됩니다.
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
Random x= new Random();
List<int> ints = new List<int>();
for(int i=0; i< 100; i++) ints.Add(x.Next(4));
Console.WriteLine(string.Join(", ",ints));
}
}
출력 (포맷)는 :
3, 0, 1, 1, 1, 1, 3, 0, 2, 0, 1, 2, 1, 0, 3, 1, 3, 0, 2, 2, 3, 1, 1, 2, 1,
2, 3, 3, 2, 3, 3, 2, 0, 3, 3, 3, 0, 0, 3, 0, 2, 1, 3, 3, 1, 0, 2, 1, 3, 0,
2, 2, 3, 3, 1, 1, 2, 3, 3, 2, 2, 0, 2, 2, 1, 2, 2, 1, 1, 3, 1, 3, 1, 2, 0,
2, 2, 1, 0, 1, 3, 1, 0, 1, 1, 1, 2, 0, 2, 1, 1, 0, 0, 0, 1, 2, 3, 0, 2, 2
그것은 다른 사람을 생산하고 있습니다. 너는 운이 좋지 않았어.
선언문 Random x=new Random()
(badname btw)을 사용하는 곳 밖으로 이동해야합니다. 따라서 반복해서 작성하지 않고 시간에 따라 "다른"씨드와 비슷한 실행을 얻는 것이 좋습니다. 우연히 다른 랜덤 시드에서 100 자리 숫자를 사용할 수 있습니다. 랜덤은 다른 것을 의미하지 않습니다. 특히 4 개의 값만 사용하여 모든 임의성을 매핑하면 더욱 그렇습니다.
주석의 발언 후 - 다른 임의 씨는 "동일한"시작 시퀀스를 보여
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> FirstNumbersFromSeed(int seed, int num)
{
var r = new Random(seed);
for (int i=0;i<num;i++)
yield return r.Next(4);
}
public static void Main()
{
Dictionary<string,List<int>> dict = new Dictionary<string,List<int>>();
int num = 5;
for (int i =0;i<2000; i++)
{
var key = string.Join(",",FirstNumbersFromSeed(i,num));
if (dict.ContainsKey(key)) dict[key].Add(i);
else dict[key] = new List<int>(i);
}
foreach(var kvp in dict.Where(d => d.Value.Count > 1))
Console.WriteLine(string.Join(", ",kvp.Key) + " same first " + num + " values for seed with ints: " + string.Join(",",kvp.Value));
}
}
출력 :
그래서 당신은 같은를 제공에 대한 305 "충돌"이
2,3,3,2,0 same first 5 values for seed with ints: 239,890
0,0,1,3,2 same first 5 values for seed with ints: 1463,1576
3,1,0,3,0 same first 5 values for seed with ints: 540,653,1876
1,1,1,2,1 same first 5 values for seed with ints: 656,769,895
<snipped 300 more output lines>
1,0,1,3,3 same first 5 values for seed with ints: 1862,1988
0에서 4까지의 임의의 값을 그릴 경우 0부터 2000 사이의 시드에 대해 "임의"값을 시작합니다.
사용 방법에 대한 가정을하고 있습니다. 아마도 그들은 속임수로 문제를 제기하고있을 것입니다. –
@MartinSmith는 서로 다른 씨앗을 사용하고 순서에 따라 처음과 동일한 5 개의 난수를 생성하여 임의의 "동일한"시퀀스를 표시하는 코드를 추가했습니다. –