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

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

31.03.2015, 16:05. Показов 3706. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru