2013-04-27 2 views
0

Мне очень жаль, я бы искал свой вопрос, но я не знаю, как правильно это сформулировать, у меня большая проблема с умственной математикой, и я пытался придумать решение. Я пытаюсь создать программу для моей гильдии, которая добавит имена в список. Этот список имеет параллельную структуру для каждой записи, которая содержит имя и количество людей пожертвования для лотереи.Связанная рандомизация

Я хочу рандомизировать все имена и получить положительные результаты от количества пожертвований, которые люди вложили. Нравится 1 или 1% увеличение возможности * количество пожертвований. Раньше я делал рандомизацию, но мне никогда не приходилось слегка влиять на шансы. Помоги мне, пожалуйста? Я бы опубликовал код, но в то время у меня не было ЛЮБОЙ рандомизации. Я могу дать вам некоторые другие вещи, хотя:

Я сделал-структуру, чтобы держать запись для каждого пользователя:

public struct pEntry 
    { 
     public string Name; 
     public int Entries; 
    } 

Я сделал список для хранения всех записей:

public List<pEntry> lEntries = new List<pEntry>(); 

Я хочу, чтобы мой рандомизация должна быть подвержена положительному влиянию количества выполненных им пожертвований (пожертвований). У этого нет ограничения на то, насколько он может высок, но если мне нужно, может быть, я смогу это сделать. 255. После того, как он рандомизируется, он отобразит сообщение о том, что этот пользователь выиграл, и он удалит эту запись из списка и выберите еще несколько. Эта программа будет использоваться для нескольких лотерей и подобных вещей, но все они используют одну и ту же систему.

+6

Почему бы не просто иметь список строк; каждый, кто покупает два билета, попадает в список дважды. Если они покупают три билета, их трижды ставят в список. Затем просто выберите случайный элемент из списка. В конце концов, так оно и работает на реальных бумажных билетах. –

+0

Если вам нужно что-то быстрое и грязное, вы можете заполнить добавление участника массиву temp для каждой сделанной им записи. Затем вы можете рандомизировать индекс для этой коллекции. EDIT: @EricLippert избил меня до этого =) – TyCobb

+3

Обратите также внимание, что если на линии есть серьезные деньги, вы должны использовать * криптографически безопасный источник случайности *. «Случайные» числа, генерируемые Math.Random, на самом деле очень предсказуемы; они только псевдослучайные. –

ответ

2

Вам нужно знать, сколько пожертвований увеличивает шансы на победу. Имеет ли 1 = еще один шанс, чем тот, кто не пожертвовал? Когда у вас есть база и бонус, вы можете просто создать «диаграмму», посмотреть, что такое верхнее число, и создать случайное число. После этого вы можете удалить этого человека или сбросить свои шансы по какой-либо фракции, которую хотите, восстановить свой список шансов и создать новый номер.

Например, если вы хотите, чтобы 1 единица пожертвования давала 10% больше шансов для этого человека, вы можете создать список всей гильдии, и каждый человек получит 10 «лотов» + 1 лот за единицу пожертвования. Так что, если у вас 3-х человек, где:

  • Энн дала 5 донорства единиц
  • Том дал 2 донорства единиц
  • Боб не давал

Результирующий список будет:

    Количество
  1. Ann много: 10 (базовый) + 5 (пожертвования) = 15 лотов
  2. Том много количество: 10 (основание) + 2 (пожертвования) = 12 лотов
  3. сосчитать
  4. Боб много: 10 (основание) + 0 (нет пожертвования) = 10 лотов

Затем вы генерируете число между 1 и 37 (15 + 12 + 10) определить победителя.

Укажите, какое пожертвование должно улучшить их шансы (увеличивается их количество), а затем вы можете начать строить свои диапазоны и генерировать свои цифры.