2014-12-18 4 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 случайных чисел из этих коллекций, и если я просуммировать его результат должен быть таким же «MAXLENGTH». Как я мог это сделать? Я уже читать 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' *, неясно –

ответ

0

Таким образом, вы должны убедиться, что ваши входы даже действительны для этого (например, есть 4 номера, которые в совокупности делают MAXLENGTH), но и для данных, представленных в этом вопросе это работает:

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; 
    } 
    } 
Смежные вопросы