![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Ребята всем привет
мне нужна чисто идея - собственно в чем проблема - она заключается в следующем - нужно заполнить карточку для игры Русское ЛОТО - рандомно выбранными цифрами Вот как я решил заполнить - просто мне нужен совет знатоков - насколько эффективнее данный способ - можно ли как то по другому это сделать более эффективнее ![]() На форме стоят две таблицы StringGrid1 и StringGrid2 получаем номер из 1 до 90 случайном порядке и проверяем номер Код:
if shar_no<10 then ... ... .. if (shar_no >= 10) and (shar_no <= 19) then .. .. .. После того как мы разместили все выпавшие номера по циклу с одного до 45 (это с запасом) Потом проверяем все ряды на количество заполненных полей - если их количество превышает 5ти то после пятого номера следующие спускаем по столбцу вниз и так до конца последней таблицы. И так в чем заключается проблема - проблема в том что заполняем вы поля начиная с начала - а вот когда начинаем проверку рядов на количество заполненных ячеек мы теряем первые номера это как? щяс наглядно покажу - смотрите на картинку ![]() Красным я указал последовательность выпадения случайным образом этих номеров - видите там где номер 5 и 6 выпали 72 и 89 но после проверки для них не осталось места в таблице и они как бы выбили а в левой стороне получилось бардак несмотря на то что цифры 40 и 24 выпали после 72 и 89 - получается что какие выпавшие номера ближе к левому краю останутся всегда а те которые в правее выпадут из таблицы как в моем случае. Что посоветуете как с этим бороться?? Нет ничего не возможного. Вопрос только во времени... |
#2
|
||||
|
||||
![]() В лото не играл, так что мб ошибаюсь с правилом заполнения. Но если я правильно понял, то по столбцам идут числа вида NX, где N - номер столбца, а X - произвольная цифра, но уникальная для столбца.
Если так, то заполняется легко: для каждого столбца берем массив цифр от 0 до 9 (для первого столбца - от 1 до 9) и делаем как-то так: Код:
// положим n - номер текущего заполняемого столбца if n =0 then begin cnt := 9 for i := 0 to cnt-1 do arr[i] := i + 1; end else begin cnt := 10; for i := 0 to cnt-1 do arr[i] := i; end; j := cnt; lim := cnt - 5; while j >= lim do begin rnd := random(j); grid[cnt - j, n] := 10*n + arr[rnd]; arr[rnd] := arr[cnt - 1]; j := j - 1; end; jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 15.05.2015 в 00:08. |
#3
|
||||
|
||||
![]() Такой метод я уже пробовал он не подходит по одному принципу - нам нужно полученные цифры размешать
Я просто чтоб тему не нагружать сильно - написал цифры попадаются рандомно - а на самом деле они по другому принципу получаются Если сказать другим методом - то представьте у нас есть список цифр в количестве 45 штук все разные одинаковых нет - с начала списка до конца их нужно размешать в таблице И что в конце будем проверять ряды на количество заполненных полей последние цифры из столбцов 60 - 70 - 80 не терялись Допустим в списке продолжительность такая Код:
1 3 15 65 23 5 72 40 22 60 21 9 55 и т.д В конце когда проверяем допустим 72 уже шестая занятая поля - его оставить а переместить или вообще удалить номер 9 с того же ряда - по принципу что 9й номер в списке идет после номера 72 Я походу уже сам догадываюсь как это реализовать))) - щяс уже поздно пойду спать утром разберусь.. Нет ничего не возможного. Вопрос только во времени... |
#4
|
||||
|
||||
![]() Я нашел в чем моя ошибка - а она в том что я на ходу считывая ячейки с лева в право делаю перемещение последние на один ряд вниз
А нужно на оборот - сперва посчитать сколько заполненных ячеек в ряду а потом начать проверку какой номер в какой ячейке - который по списку...yahooooo ![]() Нет ничего не возможного. Вопрос только во времени... |