powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Лоторея
17 сообщений из 17, страница 1 из 1
Лоторея
    #35185415
Бомж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно написать программу которая определит 111 победителей литореи.
Условья таковы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 
Количество_билетов_участника  = MOD(Сумма_Что_Он_Вложил_В_Дело,  100 )

(Пример если Иван Иванович вложил  1299  руб. то у него  12  билетов).

Сначала разыгрывается   100  мелких призов а потом  10  средних и в конце  1  супер приз.

Если участник выиграл то он не может выиграть повторно.
Посоветуйте с чего начать, как выполнить задачу грамотно?
...
Рейтинг: 0 / 0
Лоторея
    #35186221
Фотография ..:COBECTb:..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала теорию вероятностей почитайте, а дальше через ифы и елсе можно наваять :)

COBECTb™ защищена законом ؟؟؟ ©
...
Рейтинг: 0 / 0
Лоторея
    #35186376
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БомжПосоветуйте с чего начать,
Ну, лично я начал бы с

Код: plaintext
 if  FeebQnt <  111   then   raise  Exception.Create ('Задача нерешаема');

А вообще - ее надо просто сесть и сделать, с начала и до конца. Абсолютно ничего сложного. Если что-то вызывает вопрос - рассказывайте, как собираетесь делать и что на этом пути не получается.
...
Рейтинг: 0 / 0
Лоторея
    #35187159
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БомжЕсли участник выиграл то он не может выиграть повторно.участник (Иван Иванович) или билет (которых у И.И. двенадцать штук) не может выиграть повторно?
...
Рейтинг: 0 / 0
Лоторея
    #35187271
Бомж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat БомжЕсли участник выиграл то он не может выиграть повторно.участник (Иван Иванович) или билет (которых у И.И. двенадцать штук) не может выиграть повторно?
И.И. 2 раза повести НЕ может.
...
Рейтинг: 0 / 0
Лоторея
    #35187452
Бомж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
А вообще - ее надо просто сесть и сделать, с начала и до конца. Абсолютно ничего сложного. Если что-то вызывает вопрос - рассказывайте, как собираетесь делать и что на этом пути не получается.

Излагаю первый алгоритм который появился в моих скромных мозгах.
1.Создать набор данных (таблица или массив ...)
Набор[1] = "Иван Иванович"
.....
Набор[12] = "Иван Иванович"
..... ...
Набор[X] = "Вася Пупкин"
.....
Набор[X+Y] = "Вася Пупкин"
.....
Набор[N] = "Вася Пупкин"


2. Привести набор в несортированный вид. Так чтобы 1,2,3 ... билет не принадлежали И.И. или В.П. .
При каждом розыгрыше(До 111)
3. Сгенерировать случайное число. RandomVal in [1..N].
4. Встать на позицию RandomVal
5. Начать прокрутку вперед или назад при СТАРТ.
6. Остановится когда СТОП.
7. Удалить все записи этого участника из набора.

При таком алгоритме меня пугает размер набора . Примерно 10 миллионов билетов.
Может кто поделится опытом и возможно скажет оптимальный вариант?
...
Рейтинг: 0 / 0
Лоторея
    #35188057
SindoMeon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бомж softwarer
А вообще - ее надо просто сесть и сделать, с начала и до конца. Абсолютно ничего сложного. Если что-то вызывает вопрос - рассказывайте, как собираетесь делать и что на этом пути не получается.

Излагаю первый алгоритм который появился в моих скромных мозгах.
1.Создать набор данных (таблица или массив ...)
Набор[1] = "Иван Иванович"
.....
Набор[12] = "Иван Иванович"
..... ...
Набор[X] = "Вася Пупкин"
.....
Набор[X+Y] = "Вася Пупкин"
.....
Набор[N] = "Вася Пупкин"


2. Привести набор в несортированный вид. Так чтобы 1,2,3 ... билет не принадлежали И.И. или В.П. .
При каждом розыгрыше(До 111)
3. Сгенерировать случайное число. RandomVal in [1..N].
4. Встать на позицию RandomVal
5. Начать прокрутку вперед или назад при СТАРТ.
6. Остановится когда СТОП.
7. Удалить все записи этого участника из набора.

При таком алгоритме меня пугает размер набора . Примерно 10 миллионов билетов.
Может кто поделится опытом и возможно скажет оптимальный вариант?
1. Объект - таблица
2. Строка таблицы - 2 поля: номер билета, идентификатор владельца
3. Определение выигрыша
3.1 Сгенерировать случайное число. RandomVal in [1..N]. - Начальная позиция
3.2 Сгенерировать случайное число. RandomUpDown in [0, 1]. - Направление движения (вверх или вниз)
3.3 Сгенерировать случайное число. RandomDelta (тут уж как хочется) как количество позиций от начальной по направлению вверх или вниз.
3.4 Ура! мы имеем номер выигравшего билета.
Ну а как удалить из таблицы данные по билетам с идентификатором владельца выигравшего? Ну тут уж уже сами.
З.Ы. Описание алгоритма намеренно оставлено с пробелами, чтобы дать пищу для размышлений.
...
Рейтинг: 0 / 0
Лоторея
    #35188118
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бомж2. Привести набор в несортированный вид.
Зачем? Ответь на вопрос: кому станет хуже, если этого не делать?

Бомж4. Встать на позицию RandomVal
5. Начать прокрутку вперед или назад при СТАРТ.
6. Остановится когда СТОП.
Опять же зачем? Планируешь какое-то визуальное отображение? Крутящийся барабан на 10 миллионов ячеек?

БомжМожет кто поделится опытом и возможно скажет оптимальный вариант?
В общем, давай смотреть. Во-первых, ты собираешься плодить записи для одной-единственной задачи: для того, чтобы, получив число N, легко (по индексу в массиве) найти человека. Представь себе, что вместо этого Иванова ты характеризуешь диапазоном - скажем 0..9, Петрова - следующим диапазоном, скажем, 10..82 итп. Внимание, вопрос: как при этом искать запись, соответствующую номеру N?

Далее, удалять записи по человеку - плохая и лишняя операция. При солидном количестве участников куда лучше ставить признак "человек уже выиграл", и при попадании на такого - просто запускать выбор еще раз. Правда, этот подход становится неудачным, когда участников становится почти столько же, сколько призов, в частности, нужно будет предусмотреть защиту от зацикливания.
...
Рейтинг: 0 / 0
Лоторея
    #35190038
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бомж(Пример если Иван Иванович вложил 1299 руб. то у него 12 билетов).

Сначала разыгрывается 100 мелких призов а потом 10 средних и в конце 1 супер приз.

Если участник выиграл то он не может выиграть повторно.

И.И. 2 раза повести НЕ может.допустим разыгрывается 1 мелкий приз, 1 - средний и 1 - крупный.

принимают участие Ваня с 90 билетами, Петя с 9 билетами и Миша с 1 билетом.

первый мелкий приз с верятностью 90% выиграет Ваня.
и второй средний приз с верятностью 90% выиграет Петя.

первый мелкий приз с верятностью 9% выиграет Петя.
и второй средний приз с верятностью ~98.9% выиграет Ваня.

то есть с вероятностью ~89.9% крупный приз достанется Мише.

ура! :-)
...
Рейтинг: 0 / 0
Лоторея
    #35190526
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatдопустим разыгрывается 1 мелкий приз, 1 - средний и 1 - крупный.

принимают участие Ваня с 90 билетами, Петя с 9 билетами и Миша с 1 билетом.

первый мелкий приз с верятностью 90% выиграет Ваня.
и второй средний приз с верятностью 90% выиграет Петя.

первый мелкий приз с верятностью 9% выиграет Петя.
и второй средний приз с верятностью ~98.9% выиграет Ваня.

то есть с вероятностью ~89.9% крупный приз достанется Мише.

ура! :-)

А в чём, по Вашему, смысл лотереи, если не в перераспределении капиталов? :) Если крупные призы будут доставаться крупным вкладчикам, то проще вообще ничего не устраивать :) У кого было много средств - столько же и останется.

-------------

По сабжу. А зачем вам вообще диапазоны? Они у вас исключительно в голове присутствуют. Единственная характеристика каждого участника - это число билетов. Вот её и храните.
Вы хотите сделать рандом по билетам и участникам (условно говоря, перемешать билеты), и затем еще рандомно выбрать из них выигрыш. Зачем 2 рандома? Если вы выстроите всех участников по порядку (т.е. забыть про диапазоны и номера билетов) а затем рандомно выберите из этой цепочки кого-нибудь - случайности будет нисколько не меньше. Другое дело, что про общую механику такой лотереи вам очень доходчиво LeXa NalBat сказал.

ЗЫ: Если из участников сделать связанную цепочку с единственной хар-кой "число билетов" - и сравнений будет куда меньше, и победителя найти легче, да и удалять ненужных из связанной цепочки легко.
...
Рейтинг: 0 / 0
Лоторея
    #35191419
Бомж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Бомж2. Привести набор в несортированный вид.
Зачем? Ответь на вопрос: кому станет хуже, если этого не делать?

Бомж4. Встать на позицию RandomVal
5. Начать прокрутку вперед или назад при СТАРТ.
6. Остановится когда СТОП.
Опять же зачем? Планируешь какое-то визуальное отображение? Крутящийся барабан на 10 миллионов ячеек?



Дело в том что задача требует чтобы был “БАРАБАН”. А несортированный вид нужен для того чтобы имя В.П. не торчала на "Барабане" несколько секунд. Конечно же без "Барабана" все намного легче.
...
Рейтинг: 0 / 0
Лоторея
    #35191420
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БомжИ.И. 2 раза повести НЕ может.
Крутая у вас лотерея!
Что-то я не вижу трудностей... Например данные такие
Таблица№ по порядкуФИО
Т.е. человек с K-билетами встречается R-раз... Всего записей N, как и проданых билетов...
1. Генерим число с 1 по N
2. Проверяем есть ли такой номер в таблице (если нет - переходим к п 1.)
3. Берем ФИО счастливчика
4. Удаляем все записи с таким ФИО
5. Если розыгрыш не окончен - переходим к п 1.
...
Рейтинг: 0 / 0
Лоторея
    #35191436
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaТ.е. человек с K-билетами встречается R-раз...
В буквах что-то запутался Читать как:
Т.е. человек с K-билетами встречается К-раз ...

А че там про барабан?
...
Рейтинг: 0 / 0
Лоторея
    #35191443
Бомж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa[quot krvsa]
А че там про барабан?
Барабан это скроллинг по этому набору.
...
Рейтинг: 0 / 0
Лоторея
    #35191526
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бомж , тогда опиши словами чего хочеш получить на экране...
----------
Cache for Windows (Intel) 2007.1 (Build 369) Fri Jun 15 2007 15:25:42 EDT
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
Лоторея
    #35191655
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БомжДело в том что задача требует чтобы был “БАРАБАН”. А несортированный вид нужен для того чтобы имя В.П. не торчала на "Барабане" несколько секунд. Конечно же без "Барабана" все намного легче.
Пофиг. Не обязательно каждую глупость понимать буквально. Если просто будешь пять раз в секунду выплевывать на экран очередную случайную фамилию - будет все то же самое, но без этих идиотизмов.
...
Рейтинг: 0 / 0
Лоторея
    #35191721
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и эффект "прокрутки" дело наживное...
----------
Cache for Windows (Intel) 2007.1 (Build 369) Fri Jun 15 2007 15:25:42 EDT
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Лоторея
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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