Страница: 1 | 2 |
Вопрос: Генератор случайных чисел!
Добавлено: 21.11.07 17:10
Автор вопроса: Игорь | ICQ: 457394129
Товарищи подскажите очень простую модель генератора случайных чисел, который выстроит мне числа например от 1 до 32 в случайном порядке, но с повторением максимум 2 раза?
Ответы
Всего ответов: 21
Номер ответа: 1
Автор ответа:
Игорь
ICQ: 457394129
Вопросов: 52
Ответов: 133
Профиль | | #1
Добавлено: 21.11.07 17:12
Например (от 1 до 5): 1 4 2 4 5 1 3 2 5 3!
Номер ответа: 2
Автор ответа:
Игорь
ICQ: 457394129
Вопросов: 52
Ответов: 133
Профиль | | #2
Добавлено: 21.11.07 17:13
Или проще говоря генератор возьмёт например числа 1 1 2 2 3 3 4 4 5 5 и перемешает их между собой!
Номер ответа: 3
Автор ответа:
intel-DX
ICQ: 445091742
Вопросов: 4
Ответов: 169
Профиль | | #3
Добавлено: 21.11.07 18:50
x = 1 to 5
Randomize
x = Int((5 * Rnd) + 1 )
Номер ответа: 4
Автор ответа:
intel-DX
ICQ: 445091742
Вопросов: 4
Ответов: 169
Профиль | | #4
Добавлено: 21.11.07 19:13
извени недочитал всё
'intel-DX
'www.VBNet.ru
Option Explicit
Private Const Max As Integer = 15 'Do kakogo 4usla generufovat'
Dim Masiv() As Byte
'Generirovat' 4isla
Private Sub Command2_Click()
 im i As Integer
 im chisla As String
 im TEMP As Integer
For i = 1 To Max
Rand:
Randomize
TEMP = Int((Max * Rnd) + 1)
If Masiv(TEMP) = 2 Then
GoTo Rand
Else
Masiv(TEMP) = Masiv(TEMP) + 1
chisla = chisla & "->" & TEMP
End If
Next i
MsgBox chisla, vbExclamation
End Sub
Private Sub Form_Load()
ReDim Masiv(Max)
End Sub
Номер ответа: 5
Автор ответа:
Игорь
ICQ: 457394129
Вопросов: 52
Ответов: 133
Профиль | | #5
Добавлено: 21.11.07 19:24
Спасибо брат!
Номер ответа: 6
Автор ответа:
Игорь
ICQ: 457394129
Вопросов: 52
Ответов: 133
Профиль | | #6
Добавлено: 21.11.07 19:32
А вот теперь такой вопросик! Как перемешать числа, например имея числа 1 1 2 2 3 3 4 4, поставить их между собой в случайном порядке? Чтобы получилось вроде того: 1 3 2 4 2 4 1 3
Номер ответа: 7
Автор ответа:
intel-DX
ICQ: 445091742
Вопросов: 4
Ответов: 169
Профиль | | #7
Добавлено: 21.11.07 20:33
'intel-DX
'www.VBNet.ru
Option Explicit
Private Const Max As Integer = 15 'Do kakogo 4usla generufovat'
Dim Masiv() As Byte
'Fill Masiv
Private Sub Command1_Click()
Dim i As Integer
Dim indx As Integer
ReDim Masiv(Max * 2)
For i = 1 To Max * 2 Step 2
indx = indx + 1
Masiv(i) = indx
Masiv(i + 1) = indx
Next i
End Sub
'Generirovat' 4isla
Private Sub Command2_Click()
Dim i As Integer
Dim chisla As String
Dim TEMP As Integer
Dim Masiv2() As Byte
ReDim Masiv2(Max * 2)
For i = 1 To Max * 2
Rand:
Randomize
TEMP = Int((Max * Rnd * 2) + 1)
If Masiv2(TEMP) <> 0 Then
GoTo Rand
Else
Masiv2(TEMP) = Masiv(i)
End If
Next i
For i = 1 To Max * 2
chisla = chisla & "->" & Masiv2(i)
Next i
MsgBox chisla, vbExclamation
End Sub
Номер ответа: 8
Автор ответа:
intel-DX
ICQ: 445091742
Вопросов: 4
Ответов: 169
Профиль | | #8
Добавлено: 21.11.07 20:34
'intel-DX
'www.VBNet.ru
Option Explicit
Private Const Max As Integer = 15 'Do kakogo 4usla generufovat'
Dim Masiv() As Byte
'Fill Masiv
Private Sub Command1_Click()
Dim i As Integer
Dim indx As Integer
ReDim Masiv(Max * 2)
For i = 1 To Max * 2 Step 2
indx = indx + 1
Masiv(i) = indx
Masiv(i + 1) = indx
Next i
End Sub
'Generirovat' 4isla
Private Sub Command2_Click()
Dim i As Integer
Dim chisla As String
Dim TEMP As Integer
Dim Masiv2() As Byte
ReDim Masiv2(Max * 2)
For i = 1 To Max * 2
Rand:
Randomize
TEMP = Int((Max * Rnd * 2) + 1)
If Masiv2(TEMP) <> 0 Then
GoTo Rand
Else
Masiv2(TEMP) = Masiv(i)
End If
Next i
For i = 1 To Max * 2
chisla = chisla & "->" & Masiv2(i)
Next i
MsgBox chisla, vbExclamation
End Sub
Номер ответа: 9
Автор ответа:
Docal
ICQ: 408802757
Вопросов: 9
Ответов: 147
Профиль | | #9
Добавлено: 21.11.07 21:18
intel-DX Ты почему в асю не выходиш?
Номер ответа: 10
Автор ответа:
gekko
Вопросов: 39
Ответов: 127
Web-сайт:
Профиль | | #10
Добавлено: 22.11.07 17:08
Ребята, а вот второй вопросец вроде так проще:
Randomize
For i = 1 To Len(Label1.Caption)
a = Int(Rnd * Len(Label1.Caption)) + 1
z = z & Mid(Label1.Caption, a, 1)
If a > 1 And a < Len(Label1.Caption) Then
Label1.Caption = Mid(Label1.Caption, 1, a - 1) & Mid(Label1.Caption, a + 1, Len(Label1.Caption) - a + 1)
ElseIf a = 1 Then
Label1.Caption = Mid(Label1.Caption, 2, Len(Label1.Caption) - 1)
Else
Label1.Caption = Mid(Label1.Caption, 1, Len(Label1.Caption) - 1)
End If
Next i
Label1.Caption = z
End Sub
Или я чего недопонял
Номер ответа: 11
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #11
Добавлено: 22.11.07 21:39
gekko кто тебя учил код форматировать? Никто? Меня тоже.
Хотелось бы просто хотя бы отступы видеть
Номер ответа: 12
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #12
Добавлено: 22.11.07 22:08
Во! Генерирует массив чисел от 1 до 32, каждое повторяется 1 или 2 раза. Затем массив перемешивается.
Обратите внимание на извращенный способ обмена значений ячеек при перемешивании массива
Dim arr() As Long
Private Sub Form_Load()
Dim i As Long, j As Long, f As Long
Call Randomize
For i = 1 To 32
f = Int(Rnd * 2) + 1 '1-2
'f = Int(Rnd * 3) '0-2
For j = 1 To f
ReDim Preserve arr(UUBound + 1)
arr(UUBound) = i
Next j
Next i
For i = 0 To UUBound 'Рандомизация
f = Int(Rnd * (UUBound + 1))
arr(i) = arr(i) + arr(f)
arr(f) = arr(i) - arr(f)
arr(i) = arr(i) - arr(f)
Next i
For i = 0 To UUBound
Debug.Print arr(i)
Next i
End Sub
Private Function UUBound() As Long
On Error GoTo 1:
UUBound = UBound(arr)
Exit Function
1: UUBound = -1
End Function
Номер ответа: 13
Автор ответа:
intel-DX
ICQ: 445091742
Вопросов: 4
Ответов: 169
Профиль | | #13
Добавлено: 23.11.07 00:41
: )
Номер ответа: 14
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #14
Добавлено: 23.11.07 13:58
Господи.... из такого простого вопроса такую демагогию развели Топикстартер, смотри любую книгу с олимпиадными задачами, там тебе миллион способов дадут, хоть с конечными автоматами, хоть с графами, хоть с чем Ну и самый простой, конечно)
Номер ответа: 15
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #15
Добавлено: 23.11.07 17:07
Ну и какой "самый простой" способ?