Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
3 / 3 / 3
Регистрация: 30.09.2014
Сообщений: 79
1

Процентный рандом

17.02.2016, 05:46. Показов 2212. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброй ночи.
Заинтересовался как можно сделать процентный рандом.
Т.е. допустим что у нас есть массив шансов
C#
1
int[] C = { 70, 29, 1 };
и массив 3х слов
C#
1
string[] S = { "70", "29", "1" };
Соответственно C[0] = 70% на выпадение S[0].

Очень интересно как такое можно реализовать

Добавлено через 15 минут
Желательно дело в String функцию чтобы вернула текст который "выпал"
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2016, 05:46
Ответы с готовыми решениями:

Плавный рандом
Доброго дня. В общем, мне надо симетировать бурную деятельность сигнала на графике (график...

Рандом из массива + и -
Всем привет, нужен рандом из массива плюс и минус. Нагуглил что-то подобное, рандом работает, но...

Работа с Рандом-ом
Ребята подскажите как прописать рандом для такого примера(пример игровое сражение) Нанесение ...

Рандом в диапазоне
Всем привет. Ниже приведен рабочий код, который генерирует 3 колонки по 7 ячеек рандомных чисел в...

4
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
17.02.2016, 06:47 2
Лучший ответ Сообщение было отмечено LiptoN-Mmo-Dev как решение

Решение

C#
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
        static Random rnd = new Random();
        static int[] C = { 70, 29, 1 };
        static string[] S = { "70", "29", "1" };
 
        static string GetValue()
        {
            double rand = rnd.NextDouble() * 100;
 
            if (rand > 100 - C[2]) // 99...100
                return S[2];
            else if (rand > 100 - C[1] - C[2]) // 70...99
                return S[1];
            else                         // 0...70
                return S[0];
        }
 
        static void Main()
        {
            int a = 0, b = 0, c = 0;
 
            int total = 100000000;
 
            for (int i = 0; i < total; i++)
            {
                string str = GetValue();
 
                if (str == "1")
                    a++;
                else if (str == "29")
                    b++;
                else
                    c++;
            }
            Console.WriteLine("70% {0:F}, 29% {1:F}, 1% {2:F}", (double)c / total * 100, (double)b / total * 100, (double)a / total * 100);
        }
1
1145 / 873 / 507
Регистрация: 09.04.2014
Сообщений: 2,056
17.02.2016, 13:13 3
или в общем случае, если количество элементов в массивах не равно 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
static string GetValue()
        {
            int total = C.Sum();
            int rand = rnd.Next(total);
            int sum = 0;
            for (int i = 0; i < C.Length; i++)
            {
                sum += C[i];
                if (rand < sum)
                    return S[i];
            }
            return S[S.Length-1];
        }
0
3 / 3 / 3
Регистрация: 30.09.2014
Сообщений: 79
17.02.2016, 15:58  [ТС] 4
Someone007, спасибо большое, работает.

Добавлено через 38 минут
А еще, можно данный пример на C++? Ну если кто-то умеет вдруг

Добавлено через 16 минут
Уже сделал.

Добавлено через 21 минуту
Хотя не то, не работает.

Добавлено через 22 секунды
Может кто на плюсах сделать пример Someone007 ??
0
1145 / 873 / 507
Регистрация: 09.04.2014
Сообщений: 2,056
24.03.2016, 18:11 5
Цитата Сообщение от LiptoN-Mmo-Dev Посмотреть сообщение
Хотя не то, не работает.
все работает
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 static Random rnd = new Random();
        static int[] C = { 60, 20, 20 };
        static string[] S = { "A", "B", "C" };
        static void Main(string[] args)
        {
            for (int i = 0; i < 50; i++)
            {
                Console.Write(GetValue()+" ");
            }
        }
        static string GetValue()
        {
            int total = C.Sum();
            int rand = rnd.Next(total);
            int sum = 0;
            for (int i = 0; i < C.Length; i++)
            {
                sum += C[i];
                if (rand < sum)
                    return S[i];
            }
            return S[S.Length - 1];
        }
результат:
A B C C C B A A A A A A B B A C C A A A A A C A B B A A C A C A A B C A A A A A C C B B A A C A B A
0
24.03.2016, 18:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2016, 18:11
Помогаю со студенческими работами здесь

Рандом с проверкой
Всем привет. Пишу игру на юнити. Возникла проблема.Есть условие: if (mount == 1) {...

Функция рандом
Небольшой вопросик кто знает как работает функция рамдом в с#? Может она постоянно выбивать одно...

Рандом + Массив
Как сделать рандом массива? Допусти я создам два массива из 5 элементов: string Mlogin= new...

Генерация данных рандом
Заданы фамилии имена и возраст Пример: Иванов, Петров Иван, Олег,Игорь 20,30,40 подскажите как...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru