Проблема с Иосифом

Я работал с Проблема Иосифа (другая часть задания) и что мы должны сделать, это дать две переменные m а также n, m обозначает игрока, с которого начинается и n обозначает количество игроков. У меня проблема с выяснением, где поставить m переменная, так что программа запускается на правом проигрывателе и пропускает соответствующее количество пробелов.

Так что если m было 2 и было 6 игроков, это началось бы с игрока 2, было бы передано игроку 3, уничтожить игрока 3 и перейти к игроку 4, перейти к игроку 5 и уничтожить их, и так далее, пока не останется один игрок. Это вывод, который я надеюсь получить:

Enter M and N: 2 6

Person removed: 3
Person removed: 6
Person removed: 4
Person removed: 2
Person removed: 5

*** AND THE WINNER IS 1!! ***

Вместо этого с кодом я получаю

Person removed: 2
Person removed: 4
Person removed: 6
Expression: list iterator not incrementable

У меня была идея заменить int i = 1; i <= n; i++ с int i = m; i <= n; i++, начать i на правильный номер, но это дает мне:

Player removed: 3
Player removed: 5
Player removed: 2
Player removed: 6
*** AND THE WINNER IS 4!! ***

Я также знаю, почему добавили только пять игроков, но я не совсем уверен, где m может пойти так, чтобы он добавил правильное количество игроков. Любые идеи / советы будут оценены.

#include <iostream>
#include <list>

using namespace std;

int main() {
int m, n;
cout << "Enter M and N: ";
cin >> m;
cin >> n;
list<int> players;
for (int i = 1; i <= n; i++) {
players.push_back(i); // adding players to the list
}
list<int>::iterator it = players.begin();
while (players.size() > 1) {
it++;
if (it == players.end()) { // if the iterator reaches the end of the list
it = players.begin();  // wrap around to beginning
}
cout << "Person removed: " << *it << endl;
it = players.erase(it);
if (players.size() == 1) {
cout << "*** AND THE WINNER IS " << players.front() << "!! ***" << endl;
}
}

system("pause");
return 0;
}

1

Решение

Задача ещё не решена.

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

Других решений пока нет …

По вопросам рекламы [email protected]