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

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

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

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

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

Добавлено через 15 минут
Желательно дело в String функцию чтобы вернула текст который "выпал"
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2016, 05:46
Ответы с готовыми решениями:

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

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

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

4
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
17.02.2016, 06:47
Лучший ответ Сообщение было отмечено 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
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,101
17.02.2016, 13:13
или в общем случае, если количество элементов в массивах не равно 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  [ТС]
Someone007, спасибо большое, работает.

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

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

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

Добавлено через 22 секунды
Может кто на плюсах сделать пример Someone007 ??
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,101
24.03.2016, 18:11
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2016, 18:11
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru