규칙

2014-12-18 5 views
0

으로 번호를 생성 나는이규칙

var maxLength=250; 
var range=new int[]{48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75}; 

같은 컬렉션 번호가 내가 그 컬렉션에서 4 개 난수를 얻기 원하고 내가 그것을 요약하면 결과가 '최대 길이'와 동일해야합니다. 내가 어떻게 할 수 있니? 는 이미 here에서 읽을하고 있지만, 1에서 100에 내 번호 수집은 이미이

 var random = new Random(); 
     var vals = new int[count]; 
     maxLength -= count; 

     for (int i = 0; i < count; i++) 
     { 
      vals[i] = range.Select(x => range[random.Next(0, range.Length)]).FirstOrDefault(); 
     } 
     vals[count - 1] = maxLength; 
     Array.Sort(vals); 
     for (var i = count - 1; i > 0; --i) 
     { 
      vals[i] -= vals[i - 1]; 
     } 

그러나 발스의 합이 여전히 잘못된 값을 생성처럼 그 일을하려고 그 수 의 일부를 제외됩니다.

+0

사이드 메모를 - 이게 아니다. Enumerable.Range (47, 76). 어디에서 (i => tes.Contains (i)) .ToArray()'tes와 같은가? –

+0

예. 죄송합니다 중복. 이미 편집 : D – albilaga

+0

* 결과가 'a'*와 동일해야 함을 설명 할 수 있습니까? 나는 당신의 코드에서'a'를 보지 못합니다. 나는 당신이 'a'의 char 코드에 대해 이야기하고 있다고 믿는다. 하지만 여전히 * 결과는 'a'와 동일해야합니다. * 명확하지 않습니다. –

답변

0

그래서 당신은 (최대 길이을 결합 4 개 개의 숫자가 예) 당신의 입력이 심지어 유효한지 확인해야하지만 질문에서 제공되는 입력이 작동하는 것입니다 :

var maxLength = 250; 
    var range = new int[] { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75 }; 

    var rand = new Random(); 
    var resultingRandoms = new List<int>(); 
    while (true) 
    { 
    resultingRandoms = range.Select(y => range[rand.Next(0, range.Length)]).Take(4).ToList(); 
    if (resultingRandoms.Sum() == maxLength) 
    { 
     break; 
    } 
    }