Как решить задачу о математической игре Баше? Суть задачи: Есть N предметов, игроки по очереди берут от 1 до K предметов, выигрывает тот, кто возьмет последний предмет. Задача в том, чтобы проанализировать сыгранную партию и для каждого хода определить правильный он или ошибочный. Ошибочный ход - если в этой ситуации можно было сходить иначе, гарантируя себе в дальнейшем выигрыш независимо от игры соперника. Правильный ход - это ход, который не является ошибочным. К тому же, когда позиция проигрышная, то любой ход верный, т.к. его можно считать оптимальным в силу того, что результат всё равно проигрыш.Входные данные: N, K, P - кол-во сделанных ходов игроками. P ходов. (2 ≤ N ≤ 10000, 2 ≤ K ≤ 100, 2 ≤ P)Примеры: Ввод 10 5 3 3 3 4 Вывод F F T Ввод 10 5 3 4 3 3 Вывод Т Т T Вот код, но не на все тесты он показывает правильный результат, не могу найти ошибку:
// Функция для определения является ли текущий ход ошибочным bool isWrongMove(int n, int k) { if (n % (k + 1) == 0) { return true; } else { return false; } }
int main() { int N, K, P; cin >> N >> K >> P;
int totalMoves = 0; for (int i = 0; i < P; i++) { int currentMove; cin >> currentMove; totalMoves += currentMove; if (isWrongMove(N - totalMoves, K)) { cout << "F" << endl; } else { cout << "T" << endl; } } return 0;
// Функция для определения является ли текущий ход ошибочным
bool isWrongMove(int n, int k) {
if (n % (k + 1) == 0) {
return true;
} else {
return false;
}
}
int main() {
int totalMoves = 0;int N, K, P;
cin >> N >> K >> P;
for (int i = 0; i < P; i++) {
int currentMove;
cin >> currentMove;
totalMoves += currentMove;
if (isWrongMove(N - totalMoves, K)) {
cout << "F" << endl;
} else {
cout << "T" << endl;
}
}
return 0;
}