Ошибка программы переворота C ++

Я пытаюсь посчитать подряд головы в броске монеты. К сожалению, мой счетчик последовательных головок не увеличивается должным образом. Есть идеи? Код и пример вывода ниже:

#include <iostream>
#include <string>
#include "random.h"using namespace std;

string FlipCoin (string flip);int main() {
string flip;
int consecutiveHeads = 0;
int totalFlips = 0;
while (consecutiveHeads<3) {
totalFlips++;
if (FlipCoin(flip) == "heads") {
consecutiveHeads++;
} else {
consecutiveHeads = 0;
}
cout <<totalFlips<<" "<< FlipCoin(flip) << " " << consecutiveHeads <<endl;
}
cout <<"It took "<< totalFlips <<" coin flips to get 3 consecutive heads."<< endl;
return 0;
}string FlipCoin(string flip) {
if (randomChance(0.50)) {
return "heads";
} else {
return "tails";
}
}

Выход:

1 heads 1
2 tails 0
3 tails 1
4 heads 2
5 heads 3
It took 5 coin flips to get 3 consecutive heads.

2

Решение

Каждый звонок FlipCoin(flip) генерирует новое случайное число Вы вызываете его дважды, поэтому он генерирует два разных случайных числа. Вам следует позвонить FlipCoin(flip) один раз и сохранить его в переменной.

...
string result = FlipCoin(flip);
if (result == "heads") {
consecutiveHeads++;
} else
consecutiveHeads = 0;
}
cout <<"It took "<< totalFlips <<" coin flips to get 3 consecutive heads."<< endl;
...

Как кто-то еще упомянул, flip переменная в вашем main неинициализирован и не используется. Лучше удалить это. Было предложено пройти flip в качестве ссылки в вашем FlipCoin функция (используя &). Это определенно имеет применение, но это не обязательно. Самая простая ревизия может быть:

string FlipCoin() {
if (randomChance(0.50)) {
return "heads";
} else {
return "tails";
}
}

PS: если вы удалите flip параметр из функции, вы также должны заменить каждый в FlipCoin(flip); с FlipCoin();

0

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

Проблема в том, что ты звонишь FlipCoin() дважды в каждой итерации: сначала сравнить с "heads", а затем снова, чтобы отобразить, что произошло. Вам нужно вызвать его один раз и поместить в переменную:

while (consecutiveHeads<3) {
totalFlips++;
string curFlip = FlipCoin(flip);
if (curFlip == "heads") {
consecutiveHeads++;
} else {
consecutiveHeads = 0;
}
cout <<totalFlips<<" "<< curFlip << " " << consecutiveHeads <<endl;
}

Постскриптум Какой аргумент FlipCoin() за?

0

Каждый раз, когда вы звоните FlipCoin Функция, которую вы переворачиваете. Таким образом, вы переворачиваете дважды в каждой итерации вашего while функция. Вы можете рассмотреть прохождение flip как ссылка на FlipCoin:

#include <iostream>
#include <string>
#include "random.h"using namespace std;

void FlipCoin (string &flip);int main() {
string flip;
int consecutiveHeads = 0;
int totalFlips = 0;
while (consecutiveHeads<3) {
totalFlips++;
FlipCoin(flip);
if (flip == "heads") {
consecutiveHeads++;
} else {
consecutiveHeads = 0;
}
cout <<totalFlips<<" "<< flip << " " << consecutiveHeads <<endl;
}
cout <<"It took "<< totalFlips <<" coin flips to get 3 consecutive heads."<< endl;
return 0;
}void FlipCoin(string &flip) {
if (randomChance(0.50)) {
flip = "heads";
} else {
flip = "tails";
}
}
0
По вопросам рекламы [email protected]