Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Serg_yer
0 / 0 / 0
Регистрация: 14.07.2014
Сообщений: 4
#1

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

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

нужно создать функциу которая генерирует число от 1 до 6, вероятность что выпадет 6 20% а число 1-5 16%
подскажите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2014, 16:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Имитация игры с костями, вероятность шести - наибольшая (C++):

Составить программу покрытия таблицы соответствующими доминошными костями из одного набора - C++
Элементами заданной прямоугольной таблицы являются числа от 0 до 6.Составить программу покрытия таблицы соответствующими костями из 1-го...

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

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

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

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

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

32
zer0mail
2447 / 2081 / 205
Регистрация: 03.07.2012
Сообщений: 7,563
Записей в блоге: 1
20.07.2014, 16:26 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Генерируй случайное число 0-99 и каждому значению 1-6 для кости назначь диапазон.
1 0-15
...
6 80-99
1
Serg_yer
0 / 0 / 0
Регистрация: 14.07.2014
Сообщений: 4
20.07.2014, 16:55  [ТС] #3
а так правильно?


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
Supernatural
604 / 203 / 30
Регистрация: 22.11.2010
Сообщений: 1,585
Записей в блоге: 1
20.07.2014, 17:15 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
генерация числа:
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
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
20.07.2014, 17:18 #5
Надеюсь логику понял правильно.
C++
1
2
3
4
5
int dice() {
    int value = (rand() % 100) >> 4;
    if ( value > 5 ) value = 5;
    return value + 1;
}
1
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
20.07.2014, 17:30 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
Serg_yer
0 / 0 / 0
Регистрация: 14.07.2014
Сообщений: 4
20.07.2014, 17:57  [ТС] #7
Цитата Сообщение от Serg_yer Посмотреть сообщение
а так правильно?
получается мой код не правильный?
0
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
20.07.2014, 21:39 #8
Забавно. Жутко неправильный, неграмотный код, выдающий тотальное непонимание сути происходящего.

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

Ваша проблема в математике и логике. Прочтите какую-нибудь книжку типа "Искусство правильно мыслить".
1
Alex5
1120 / 781 / 128
Регистрация: 12.04.2010
Сообщений: 2,007
20.07.2014, 22:17 #9
Цитата Сообщение от 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
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
21.07.2014, 07:13 #10
Serg_yer, твой код не правильный потому что ты вызываешь dice() несколько раз.
0
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 373
Завершенные тесты: 2
21.07.2014, 10:34 #11
согласен с castaway, как же вы, профессионалы не заметили такой промах:
if (dice() >= 1 && dice() <= 20)
функция тут запускается 2 раза и генерирует 2 раза разное число, то есть вначале сгенерирует что-то, проверит на >=1, если верно сгенерирует ещё раз НОВОЕ, ДРУГОЕ число и проверит на <=20, если повезёт, то условие пройдёт, но шанс мал, меньше 20%, правильно сделать так:
if(dice()<=20) , т.к. смысл проверять >=1 нет, т.к. функция вернёт от 1го до 100
0
ValeryS
Модератор
7020 / 5358 / 530
Регистрация: 14.02.2011
Сообщений: 18,073
21.07.2014, 10:49 #12
Цитата Сообщение от 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
Supernatural
604 / 203 / 30
Регистрация: 22.11.2010
Сообщений: 1,585
Записей в блоге: 1
21.07.2014, 11:51 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
Я правильно понимаю что 6 никогда не выпадет?
да, проверил вывод при rand()%1 и при rand()%2, в первом случае кроме 0 я ничего не получил, во втором случае появлялись 1
0
ValeryS
Модератор
7020 / 5358 / 530
Регистрация: 14.02.2011
Сообщений: 18,073
21.07.2014, 12:00 #14
Цитата Сообщение от Supernatural Посмотреть сообщение
проверил вывод при rand()%1
расскажи какой остаток от деления на 1???
Цитата Сообщение от Supernatural Посмотреть сообщение
во втором случае появлялись 1
всегда!
0
Supernatural
604 / 203 / 30
Регистрация: 22.11.2010
Сообщений: 1,585
Записей в блоге: 1
21.07.2014, 12:09 #15
ValeryS, к чему клонишь?
0
21.07.2014, 12:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2014, 12:09
Привет! Вот еще темы с ответами:

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

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

Найти вероятность того, что все мячи, взятые для второй игры новые. - Теория вероятностей
В ящике находятся 12 мячей, из которых 5 новых. Для первой игры наугад берутся три мяча, которые после игры возвращаются в ящик. Для второй...

В корзине 9 мячей из них 6 новые. Найти вероятность того, что для второй игры взяли 3 новых мяча - Теория вероятностей
Помогите пожалуйста решить задачу. В корзине 9 мячей из них 6 новые . Для первой игры берут три после чего возвращают. Для второй снова...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru