2015-08-15 3 views
1

Я ищу, чтобы создать список «случайных» чисел от 1 до 15, но без повторения. Я создал массив и хочу хранить каждый номер в нем, но не могу понять, как это сделать. Я добрался до создания случайного списка и сохранил его в массиве, но не могу полностью убедиться, что повторений нет. Любая помощь будет оценена по достоинству. Мой код выглядит следующим образом:Создать список случайных чисел без повторения

int[] myList = new int[15]; 
    Random random = new Random(); 

    for (int i = 0; myList.Length; i++) 
    { 
    myList[i] = random.Next(1, 15); 
    } 
+0

возможно дубликат [Random перетасовки массива] (http://stackoverflow.com/questions/1519736/random-shuffling-of-an- массив) – user140547

ответ

1

Поскольку размер вашего списка равно возможных значений, вы можете просто создать список в обычном порядке:

int[] myList = new int[15]; 
for (int i = 0; i < myList.Length; i++) 
{ 
    myList[i] = i + 1; 
} 

, а затем перетасовать его, например, путем присвоения случайного значения для каждой записи и сортировать по этому значению:

Random random = new Random(); 
myList = myList.OrderBy(a => random.Next()).ToArray(); 
0

Вы можете сделать это с помощью Fisher–Yates shuffle.

Пример реализации:

int n = 15; 
int[] myList = new int[n]; 
Random random = new Random(); 

for (int i = 0; i < n; i++) 
{ 
    myList[i] = i + 1; 
} 
for (int i = n - 1; i >= 1; i--) 
{ 
    int j = random.Next(1, i); 
    int temp=myList[i]; 
    myList[i]=myList[j]; 
    myList[j]=temp; 
} 
0

Вы должны получить правильный алгоритм.

Начать с I = 15

Выберите случайное число от 1 до I.

Добавь его в список.

Поменяйте его на (i-1) -й указатель.

декремента I на 1.

Повторите описанные выше шаги.

Код выше может быть:

int[] myList = new int[15]; 
int[] original_list = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 
    Random random = new Random(); 

    for (int i = myList.Length; i>=0; i--) 
    {int randNo = random.Next(0, i-1); 
    myList[i] = original_list[randNo]; 
    swap(original_list[i-1],original_list[randNo]); //your swap method 
    } 
Смежные вопросы