powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сгенерироватьь неповторяющиеся случайные числа?
8 сообщений из 8, страница 1 из 1
Как сгенерироватьь неповторяющиеся случайные числа?
    #32847554
mod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь сгенирить билеты к экзамену.
есть 40 вопросовю Надо по два вопроса в билет, но чтобы вопросы не повторялись. Написал прогу. Хрен. Вначале она дублирования у меня подавляет, а потом зацикливается....
Как генирить случайные числа без повторов?
Образец моей проги:
Dim NumberTicket As String
Dim iCount, jCount, kCount, lCount, mCount As Integer
Dim NumRnd As Integer
Dim NumRndCntrl(0) As Integer
For iCount = 1 To GenCmbBox.Text() / GenValCmbBox.Text()
NumberTicket = ""
For jCount = 1 To GenValCmbBox.Text()
kCount = 0
mCount = 0
Randomize()
While kCount = 0
NumRnd = CInt(Int((GenCmbBox.Text() * Rnd()) + 1))
For lCount = 0 To iCount - 1
If NumRnd = NumRndCntrl(lCount) Then
mCount = 1
Exit For
End If
Next
If mCount = 1 Then
kCount = 0
Else
kCount = 1
End If

End While
NumberTicket &= ", " & NumRnd
ReDim Preserve NumRndCntrl(UBound(NumRndCntrl) + 1)
NumRndCntrl(iCount) = NumRnd
Next
TickTxtBox.Text() &= "Билет №" & iCount & ": " & NumberTicket & "; "
Next
...
Рейтинг: 0 / 0
Как сгенерироватьь неповторяющиеся случайные числа?
    #32848641
Ustazz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как в жизни делается? Берутся вопросы, перемешиваются и вытаскиваются по одному.

Надо использовать алгоритм перемешивания над массивом номеров вопросов. Например такой: проходим по всем элементам массива и меняем текущий элемент со случайно выбранным другим элементом. После того как массив будет перемешан, берем элементы по порядку.
...
Рейтинг: 0 / 0
Как сгенерироватьь неповторяющиеся случайные числа?
    #32849254
mod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думал над этим. Боюсь что он будет мешать так же как и генерить....
...
Рейтинг: 0 / 0
Как сгенерироватьь неповторяющиеся случайные числа?
    #32849394
Стр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
случайным образом выбираем билет и перекладываем его из исходной кучи (массива) в другую кучу (массив).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
ArrayList ia=new ArrayList(), // исходные номера билев	
          ra=new ArrayList(); // перемешанные номера

for(int i=0; i<32; i++)
{  ia.Add(i+1); // номера билетов по порядку (1, 2, 3, ... 32)
}

Random rn=new Random();
for(int i=0; i<32; i++)
{
  double nnd=rn.NextDouble()*(ia.Count);
  int    nni=(int)nnd;
  if(nni>=ia.Count) nni=ia.Count-1; // денормализуем от 0 до индекса последнего элемента
		
  ra.Add(ia[nni]);  // вытаскиваем номер билета
  ia.RemoveAt(nni); // 
}
Извини за C#
...
Рейтинг: 0 / 0
Как сгенерироватьь неповторяющиеся случайные числа?
    #32849682
mod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C# без разницы...
Просто хотелось через Rnd генерить... Так то понятно....
Не уж то никак повторения не исключить?
...
Рейтинг: 0 / 0
Как сгенерироватьь неповторяющиеся случайные числа?
    #32849697
mod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...да и не билеты надо тянуть, а генирить эти билеты в зависимости от числа вопросов вообще и числа вопросов в билете...
Билеты тянуть уже будут другие, на экзамене ;-)
...
Рейтинг: 0 / 0
Как сгенерироватьь неповторяющиеся случайные числа?
    #32849722
mod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно конечно урезать массив-источник, это безусловно исключит повторения... Но...
...
Рейтинг: 0 / 0
Как сгенерироватьь неповторяющиеся случайные числа?
    #32849735
Стр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так вторая куча и будет случайным образом перемешанные номера вопросов. и сдавай оттуда по порядку по 2 (3, 4, ..) вопроса на билет. а 32 вопроса(преферансная колода) можно заменить на любое число, кратное количеству вопросов в билете.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сгенерироватьь неповторяющиеся случайные числа?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]