visual studio 2012 — прокатка нескольких штампов в переполнении стека

Я работал над практическими задачами для своего класса по информатике, и один из них гласит следующее:

Пара костей катится многократно. Если появляется «вагончик» (6-6), игрок А выигрывает. Если нет, но 7 появляется дважды подряд (например, один кубик показывает 7, а затем после того, как вы бросите оба кубика снова, появляется еще 7), выигрывает B. Напишите программу на C ++, чтобы бросить пару кубиков 1000 раз и вывести, сколько раз A и B выиграли бы.

Итак, я получил основной костяк программы и протестировал ее несколько раз, но до сих пор каждый раз B-игрок показывал победу 0 раз. Выигрыши игрока A менялись каждый раз, когда я запускал программу, поэтому я считаю, что A правильно закодирован, но любые советы или отладка будут высоко оценены. Программа:

#include <iostream>
#include <ctime>
using namespace std;

int main()
{
int die1, die2, store = 0, awin = 0, bwin = 0;

srand(time(NULL));

for(int i = 0; i < 1000; i++)
{
die1 = rand()% 6+1;
die2 = rand()% 6+1;

if(die1 == 6 && die2 == 6)
{
awin++;
}
else if(die1 == 7 || die2 == 7)
{
store = 1;
}

if(store == 1 && die1 == 7)
{
bwin++;
store = 0;
}
else if(store == 1 && die2 == 7)
{
bwin++;
store = 0;
}

store = 0;
}

cout << "A has won " << awin << " times and B has won " << bwin << " times." << endl;

system("pause");

}

0

Решение

rand() % 7 НИКОГДА не даст вам результат 7. Это остаток от числа, разделенного на 7, так что вы получите что-нибудь между 0 и 6.

Имея в виду ваш комментарий, просто проверьте, что die1 + die2 == 7 и вы будете отсортированы.

1

Другие решения

rand()%6+1 возвращает диапазон от 1 до 6.
store назначается только при условии, что кубик бросает 7, что никогда не происходит.
bwin увеличивается только в том случае, если store равно броску кубика, что также никогда не происходит, поскольку хранилище инициализируется равным 0 и условия для его переназначения (бросок 7) никогда не могут быть выполнены.
Следовательно, bwin всегда 0 и awin увеличивается только тогда, когда оба кубика бросают 6.

0

Все в этой части кажется правильным:

if(die1 == 6 && die2 == 6) {
awin++;
}

После этого все становится на бок.

Сначала проверьте, был ли предыдущий бросок равен 7 и соответствует ли текущий бросок предыдущему броску:

if(store == 7 && store == die1 + die2) {

Если это имеет значение true, b выиграл:

    bwin++;
}

Затем сохраните значение текущего броска, чтобы вы знали об этом при следующем броске:

store = die1+die2;
0

Вы должны проверять не каждый кубик против 7, а сумму двух кубиков.

Попробуй это

for(int i = 0; i < 1000; i++)
{
die1 = rand()% 6+1;
die2 = rand()% 6+1;

if(die1 == 6 && die2 == 6)
{
awin++;
}
else if (store == 7 && (die1 + die2) == 7)
{
bwin++;
}

store = die1 + die2;
}
0
По вопросам рекламы [email protected]