Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191

Шанс выпадения

31.03.2015, 16:05. Показов 3739. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Передо мной стоит задача сделать шанс выпадения предметов. Суть такая, есть некий ящик, в котором лежат вещи(от10 до 50 вещей). Нужно сделать так, что бы выбрав ящик, достались вещи в количестве 100, но с повторяющимися, при чем, некоторые вещи должны выпадать чаще чем другие, какими способами можно это реализовать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2015, 16:05
Ответы с готовыми решениями:

Рандомные числа с вероятностью выпадения
Всё здравствуйте. Помогите знающие люди пожалуйста, как реализовать php формулу рандома с вероятность выпадений определённый чисел. ...

Шанс выпадения числа
Доброе время суток,подскажите как правильно сделать шанс выпадения числа. У меня есть массив чисел от 1 до 6, нужно чтобы число 1...

Подсчет вероятности выпадения случайного числа
Добрый день, начну с того, что с php не особо знаком и надеюсь на поддержку в реализации несложной задачи. Пользователь вводит несколько...

4
 Аватар для suharik
261 / 247 / 57
Регистрация: 03.09.2010
Сообщений: 805
02.04.2015, 23:47
Классный вопрос. Мне тоже интересно.
0
Заблокирован
03.04.2015, 01:47
А что тут сложного?
PHP
1
2
3
$arr1 = array(1,2);// при выборе рандомом у единицы шанс выпадения 50%
$arr2 = array(1,1,2);//  а теперь 67%
$arr3 = array(1,1,1,2);//  а теперь 75%
Логика ясна? Вам осталось произвести простые арифметические действия.
0
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
05.04.2015, 16:12  [ТС]
Trukl, на сколько я понял, это будет работать для вывода одной вещи из ящика с шансом.
А нужно реализовать так, что бы выбрано было 100 вещей, у каждой из них должен быть коэфициент выпадения, т.е. одних вещей будет выпадать меньше, других больше.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
05.04.2015, 18:53
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
class RandomBox {
    public function __construct($things) {
        foreach ($things as $thing) {
            if ($thing['amount'] < 1) {
                throw new Exception();
            }
            $this->things[] = array(
                'thing' => $thing['thing'],
                'amount' => $thing['amount'],
                'chance' => 0.0
            );
        }
        $this->calculateBounds();
    }
    public function get() {
        $random = mt_rand() / mt_getrandmax();
        $size = count($this->things);
        $n = 0;
        for ($i=1; $i < $size; ++$i) {
            $cur = $this->things[$i];
            if ($cur['chance'] < $random) {
                $n = $i;
                continue;
            }
            break;
        }
        $res = $this->things[$n]['thing'];
        if (!--$this->things[$n]['amount']) {
            unset($this->things[$n]);
            $this->things = array_values($this->things);
        }
        $this->calculateBounds();
        return $res;
    }
    private function calculateBounds() {
        $total = 0.0;
        foreach ($this->things as $thing) {
            $total += $thing['amount'] * $thing['thing']->priority;
        }
        $chance = 0.0;
        foreach ($this->things as &$thing) {
            $thing['chance'] = $chance;
            $chance += $thing['thing']->priority * $thing['amount'] / $total;
        }
    }
    private $things;
}
 
class Something {
    public function __construct($name, $priority = 1) {
        if ($priority < 0) {
            throw new Exception();
        }
        $this->name     = $name;
        $this->priority = $priority;
    }
    public function __get($property) {
        if (property_exists($this, $property)) {
            return $this->$property;
        }
    }
    private $name;
    private $priority;
}
 
$box = new RandomBox(array(
    array(
        'thing' => new Something('qwerty', 10),
        'amount' => 1
    ),
    array(
        'thing' => new Something('test', 1),
        'amount' => 10
    ),
    array(
        'thing' => new Something('asdf', 2.5),
        'amount' => 5
    )
));
 
for ($i = 0; $i < 16; ++$i) {
    $thing = $box->get();
    echo $thing->name . '<br>';
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.04.2015, 18:53
Помогаю со студенческими работами здесь

Шанс выпадения True и False
Имеется код: public static void Percent_Set(int shans, out bool i) { Random rand = new Random(); ...

Шанс выпадения и выборка из массива по столбцам
Вечер добрый светила данного сайта. Подскажите пожалуйста. Имеется массив, где в два столбца хранятся данные двух типов. Первый столбец...

Шанс. Создать шанс
Кто посоветует, кто предложит пряморукий, нормальный, рабочий вариант реализации шанса. Цель: Создать программу которая будет...

Второй шанс
Девушки! Дали ли бы вы второй шанс м..ку, который опоздал на второе свидание на полтора часа, пришел бухой и все делал не так? Можно ли...

последний шанс
Товарищи, я уже задолбался искать по знакомым и друзьям, поэтому обращусь к вам: кто из Питера может помочь с прошивкой АТМеги 8-16pu в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru