Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 14.07.2014
Сообщений: 4

Имитация игры с костями, вероятность шести - наибольшая

20.07.2014, 16:06. Показов 2748. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужно создать функциу которая генерирует число от 1 до 6, вероятность что выпадет 6 20% а число 1-5 16%
подскажите пожалуйста
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.07.2014, 16:06
Ответы с готовыми решениями:

Задача с игральными костями. Найти вероятность события
Брошены две игральные кости.Найти вероятность следующего события: удвоенный модуль разности выпавших очков больше или равен их...

Теория вероятности. Найти вероятность осуждения шести обвиняемых.
Помогите, плиз решить: Вероятность раскрытия следователем уголовного дела = 0,75, вероятность вынесения обвинительного договора в суде =...

Найти вероятность события, что из шести выстрелов было три удачных
Стрелок делает 6 выстрелов в тире. Вероятность успеха в каждом выстреле равна 0,7. Найти вероятность события, что из шести выстрелов было...

32
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
20.07.2014, 16:26
Лучший ответ Сообщение было отмечено Serg_yer как решение

Решение

Генерируй случайное число 0-99 и каждому значению 1-6 для кости назначь диапазон.
1 0-15
...
6 80-99
1
0 / 0 / 0
Регистрация: 14.07.2014
Сообщений: 4
20.07.2014, 16:55  [ТС]
а так правильно?


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
36
37
38
39
# include <iostream>
# include <ctime>
using namespace std;
 
int dice1_5()
{
    return rand() % 5 + 1;
 
 
}
 
int dice6()
{
 
    return 6;
}
 
 
int dice()
{
 
    return rand() % 100 + 1;
 
}
 
int main()
{
    srand(time(0));
 
    for (int i = 1; i <= 10; i++)
    {
        if (dice() >= 1 && dice() <= 20)
            cout << dice6() << " ";
        else if (dice() >= 21 && dice() <= 100)
            cout << dice1_5() << " ";
    }
    system("pause");
 
}
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
20.07.2014, 17:15
Лучший ответ Сообщение было отмечено Serg_yer как решение

Решение

генерация числа:
C++
1
2
3
4
srand(time(0));
a=rand()%6;
if (a==0) a++; //если а=0, то прибавляем 1
cout<<a;
с вероятностью помочь не могу
нет, стоп, там ошибочка (я еще не проснулся, извиняюсь), если поставить rand%5 - будут выпадать числа от 0 до 4, тогда надо будет проверять на случай появления 0,

Добавлено через 6 минут
Правильней будет rand%6, тогда 0-5, и делать проверку, если равно 0, то прибавить 1
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.07.2014, 17:18
Надеюсь логику понял правильно.
C++
1
2
3
4
5
int dice() {
    int value = (rand() % 100) >> 4;
    if ( value > 5 ) value = 5;
    return value + 1;
}
1
431 / 385 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
20.07.2014, 17:30
Лучший ответ Сообщение было отмечено IrineK как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
int con_dice()
{
    int d = rand() % 100;
    if( d > 79 ) {
        d = 6;
    } else {
        d /= 16;
        ++d;
    }
    return d;
}
1
0 / 0 / 0
Регистрация: 14.07.2014
Сообщений: 4
20.07.2014, 17:57  [ТС]
Цитата Сообщение от Serg_yer Посмотреть сообщение
а так правильно?
получается мой код не правильный?
0
431 / 385 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
20.07.2014, 21:39
Забавно. Жутко неправильный, неграмотный код, выдающий тотальное непонимание сути происходящего.

Этот код будет выдавать 6 в 20% случаев, числа 1-5 в 64% случаев, а в остальных 16% случаев - ничего.

Ваша проблема в математике и логике. Прочтите какую-нибудь книжку типа "Искусство правильно мыслить".
1
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
20.07.2014, 22:17
Цитата Сообщение от Serg_yer Посмотреть сообщение
создать функцию, которая генерирует число от 1 до 6, , вероятность что выпадет 6 20% а число 1-5 16%
Цитата Сообщение от Serg_yer Посмотреть сообщение
получается мой код не правильный?
Serg_yer, Ваш код нельзя назвать неправильным, т.к. код такой функции отсутствует.

Добавлено через 27 минут
Цитата Сообщение от Serg_yer Посмотреть сообщение
а так правильно?
Цитата Сообщение от Serg_yer Посмотреть сообщение
C++
1
2
3
4
if (dice() >= 1 && dice() <= 20)
 cout << dice6() << " ";
 else if (dice() >= 21 && dice() <= 100)
 cout << dice1_5() << " ";

Serg_yer, Вы здесь пропустили блок else{}.

C++
1
2
3
4
5
6
if (dice() >= 1 && dice() <= 20)
 { /**/}
 else if (dice() >= 21 && dice() <= 100)
 { /**/}
 else 
  { /* Считаете ли Вы, что мы никогда не попадём в эту точку? */ }
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.07.2014, 07:13
Serg_yer, твой код не правильный потому что ты вызываешь dice() несколько раз.
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
21.07.2014, 10:34
согласен с castaway, как же вы, профессионалы не заметили такой промах:
if (dice() >= 1 && dice() <= 20)
функция тут запускается 2 раза и генерирует 2 раза разное число, то есть вначале сгенерирует что-то, проверит на >=1, если верно сгенерирует ещё раз НОВОЕ, ДРУГОЕ число и проверит на <=20, если повезёт, то условие пройдёт, но шанс мал, меньше 20%, правильно сделать так:
if(dice()<=20) , т.к. смысл проверять >=1 нет, т.к. функция вернёт от 1го до 100
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
21.07.2014, 10:49
Цитата Сообщение от Supernatural Посмотреть сообщение
Правильней будет rand%6, тогда 0-5, и делать проверку, если равно 0, то прибавить 1
Я правильно понимаю что 6 никогда не выпадет?

Добавлено через 4 минуты
Цитата Сообщение от Serg_yer Посмотреть сообщение
число от 1 до 6, вероятность что выпадет 6 20% а число 1-5 16%
самый простой вариант
C++
1
2
3
4
5
6
int table[25]={1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,6};
int fnc()
{
 return table[rand()%25};
 
}
1
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
21.07.2014, 11:51
Цитата Сообщение от ValeryS Посмотреть сообщение
Я правильно понимаю что 6 никогда не выпадет?
да, проверил вывод при rand()%1 и при rand()%2, в первом случае кроме 0 я ничего не получил, во втором случае появлялись 1
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
21.07.2014, 12:00
Цитата Сообщение от Supernatural Посмотреть сообщение
проверил вывод при rand()%1
расскажи какой остаток от деления на 1???
Цитата Сообщение от Supernatural Посмотреть сообщение
во втором случае появлялись 1
всегда!
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
21.07.2014, 12:09
ValeryS, к чему клонишь?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
21.07.2014, 12:22
Цитата Сообщение от Supernatural Посмотреть сообщение
ValeryS, к чему клонишь?
к тому что написано у тебя неправильно
C++
1
2
a=rand()%2;
if (a==0) a++; //если а=0, то прибавляем 1
остаток от деления на 2 это 0 или 1
если 0 прибавляем 1
итого всегда 1
теперь вернемся к оригиналу
C++
1
2
3
4
srand(time(0));
a=rand()%6;
if (a==0) a++; //если а=0, то прибавляем 1
cout<<a;
как ты правильно отметил остаток от деления на 6 лежит в диапазоне 0-5
если выпало 0 прибавим 1 будет
если 1, 2 , 3 , 4, 5 то ничего не делаем
результат 6 никогда не выпадет
а 1 будет появляться чаще остальных
выбрось иф и будет тебе щастье
C++
1
2
3
4
srand(time(0));
a=rand()%6;
 a++; 
cout<<a;
диапазон от 1 до 6

хотя по большому счету, все решения неправильные, и мое тоже
для статистики нельзя употреблять % уж больно плохое распределение

по правильному нужно так
C++
1
a=rand()*6/RAND_MAX+1;
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
21.07.2014, 12:49
ValeryS, ок.
скромный вопрос, а где я написал код а=rand()%2?
Что касается 6, то там отдельная "вероятность". Честно говоря, я немного удивлен находчивости ТС по вычислению вероятности. Я далеко не эксперт по программированию, но ни разу не помню, чтобы можно было задавать вероятность появления определенных чисел в генераторе

Добавлено через 5 минут
и да, не совсем понимаю использование rand_max )))
0
431 / 385 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
21.07.2014, 13:01
Цитата Сообщение от Krock21rus Посмотреть сообщение
согласен с castaway, как же вы, профессионалы не заметили такой промах:
Это ты не заметил того факта, что все это заметили. Вспоминается эпизод из фильма "Тупой и еще тупее", где герой Джима Керри узнал, что американцы, оказывается, на Луне побывали, и начал это другим рассказывать...

Цитата Сообщение от Supernatural Посмотреть сообщение
я немного удивлен находчивости ТС
Вот и слово нашли подходящее - находчивость. А то я долго думал, как это назвать, чтобы без мата. Предлагаю ввести на форуме такой локальный мем - находчивость. И всем сразу понятно, что имеется в виду код как у ТС.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2222 / 1424 / 419
Регистрация: 16.05.2013
Сообщений: 3,639
Записей в блоге: 6
21.07.2014, 13:01
Цитата Сообщение от Supernatural Посмотреть сообщение
и да, не совсем понимаю использование rand_max )))
RAND_MAX всего навсего определяет максимальное значение которое может вернуть rand()
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
21.07.2014, 13:19
Цитата Сообщение от Ilot Посмотреть сообщение
RAND_MAX всего навсего определяет максимальное значение которое может вернуть rand()
ну понятно, что максимум, но какую роль играет в этом эпизоде, когда надо вернуть от 0-5? )))) 6 я не считаю, потому что по "условию" там другая "вероятность".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.07.2014, 13:19
Помогаю со студенческими работами здесь

Найти вероятность того, что среди выбранных шести шаров не менее 4-х белых
В группе 7 студентов имеют высокие балы, 12-средние, 8-низкий рейтинг. Наугад выбирают 6 студентов, найти вероятность того ,что среди них...

Найти вероятность того, что из шести купленных изделий первосортными окажутся три
Помогите решить задачу, пожалуйста! Фабрика выпускает 75% продукции первого сорта. Найти вероятность того, что из шести купленных...

Конвертирование объекта модифицированного костями для Unity.
Возникла такая ситуация. Смоделировал прямую дорогу, добавил кости и сделал кривую. Сохранил, загрузил в unity, но коллайдер для моей...

Задача с костями. (подбрасывают 6 раз одну кость)
Игральную кость подбрасывают 6 раз. А)6 раз выпадет одинаковое число очков Б) сумма выпавших очков четна

Какова вероятность выигрыша всей игры для второго шахматиста?
Два шахматиста условились сыграть 5 результативных партий.Вероятноть выиграша каждой отдельной партии первым шахматистом равна 2/3, а...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru