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

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

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

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

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

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

А вообще - ее надо просто сесть и сделать, с начала и до конца. Абсолютно ничего сложного. Если что-то вызывает вопрос - рассказывайте, как собираетесь делать и что на этом пути не получается.
...
Рейтинг: 0 / 0
13.03.2008, 10:41
    #35187159
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лоторея
БомжЕсли участник выиграл то он не может выиграть повторно.участник (Иван Иванович) или билет (которых у И.И. двенадцать штук) не может выиграть повторно?
...
Рейтинг: 0 / 0
13.03.2008, 11:11
    #35187271
Бомж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лоторея
LeXa NalBat БомжЕсли участник выиграл то он не может выиграть повторно.участник (Иван Иванович) или билет (которых у И.И. двенадцать штук) не может выиграть повторно?
И.И. 2 раза повести НЕ может.
...
Рейтинг: 0 / 0
13.03.2008, 11:56
    #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
13.03.2008, 14:12
    #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
13.03.2008, 14:27
    #35188118
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лоторея
Бомж2. Привести набор в несортированный вид.
Зачем? Ответь на вопрос: кому станет хуже, если этого не делать?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ура! :-)

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

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

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

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

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



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

А че там про барабан?
...
Рейтинг: 0 / 0
14.03.2008, 15:53
    #35191443
Бомж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лоторея
krvsa[quot krvsa]
А че там про барабан?
Барабан это скроллинг по этому набору.
...
Рейтинг: 0 / 0
14.03.2008, 16:09
    #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
14.03.2008, 16:36
    #35191655
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лоторея
БомжДело в том что задача требует чтобы был “БАРАБАН”. А несортированный вид нужен для того чтобы имя В.П. не торчала на "Барабане" несколько секунд. Конечно же без "Барабана" все намного легче.
Пофиг. Не обязательно каждую глупость понимать буквально. Если просто будешь пять раз в секунду выплевывать на экран очередную случайную фамилию - будет все то же самое, но без этих идиотизмов.
...
Рейтинг: 0 / 0
14.03.2008, 16:50
    #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]