if a>b then
b=cint(rnd*(999-a))+a
else
b=cint(rnd*999)-a
end if
XPAHuTEJIb писал(а):А задачка как звучит: если с первого раза число не угадал, программа себе подсказывает что число больше или меньше?
Debugger писал(а):
1. ...(а вдруг пользователь загадал 999?)...
2. Такой же глюк, когда делает колоду карт. Все карты рандомные. Вроде, все 54 карты идут бодро, но ведь их ещё надо и перетасовать!!!
Private Sub Form_Load()
Dim Cards(1 To 52) As Integer
Const suffle As Integer = 100 ' от этого числа зависит "качество" размешивания.
Dim temp1 As Integer, temp2 As Integer, swap As Integer
Dim i As Integer
Dim human As Integer
For i = 1 To 52: Cards(i) = i: Next i
Randomize
For i = 1 To suffle
temp1 = ((51 * Rnd) \ 1) + 1
temp2 = ((51 * Rnd) \ 1) + 1
swap = Cards(temp2) '
Cards(temp2) = Cards(temp1) '
Cards(temp1) = swap '
'Можно еще так
' Cards(temp1) = Cards(temp2) + Cards(temp1)
' Cards(temp2) = Cards(temp1) - Cards(temp2)
' Cards(temp1) = Cards(temp1) - Cards(temp2)
Next i
human = (51 * Rnd \ 1) + 1
For i = 1 To 52
If Cards(i) = human Then
MsgBox "Загаданная карта - " & CStr(Cards(i)) & vbNewLine & "Позиция в колоде - " & CStr(i)
Exit For
End If
Next i
Unload Me
End Sub
' Cards(temp1) = Cards(temp2) + Cards(temp1)
' Cards(temp2) = Cards(temp1) - Cards(temp2)
' Cards(temp1) = Cards(temp1) - Cards(temp2)
XPAHuTEJIb писал(а):ты можешь создать массив на 999 эл-в, поставить туда например "1", а после попадания в это число ставить "0"
' Cards(temp1) = Cards(temp2) + Cards(temp1)
' Cards(temp2) = Cards(temp1) - Cards(temp2)
' Cards(temp1) = Cards(temp1) - Cards(temp2)
Была такая задачка, в ГАНГе ещё учился Smile
Ну так суть в том, что идёт перебор и сравнение с картой хумана.
Можно это ускорить, разбив на несколько частей, и искать сразу в каждой части либо поочереди(1-200;201-400;....801-999)
Oxygen писал(а):Я так и не поняла, что автору вообще нужно на сей данный момент?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 107