@stioann

Задания с CodeForces. Вариант решения есть, но не подходит для всех тестов. Может неправильно понял реализацию решения?

Суть задачи в том, что имеется лифт, который стоит на 0 этаже. Нам нужно попасть на этаж (D) и для этого у нас есть всего две кнопки "+3" и "-2". D на входе больше или равно "-1000" и меньше или равно "1000". На выход программа должна дать минимальное количество нажатий для достижения нужного этажа. Решение реализовано на C++.

Код есть, но не проходит тест до конца. Может я условие неправильно реализовал? Или не правильно понял как решить задачу.

Код:
#include <iostream>
#include <cmath>

int main() {
    int D;
    std::cin >> D;

    D = std::abs(D);

    int count = 0;

    while (D != 0) {
        if (D >= 3) {
            D -= 3;
            count++;
        } else {
            D += 2;
            count++;
        }
    }

    std::cout << count << std::endl;

    return 0;
}
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
тебе надо отдельно рассмотреть D > 0 и D < 0, потому что в первом кейсе сначала едем вверх по 3 этажа и потом чуть вниз по 2, а во втором - сначала вниз по 2 этажа, потом чуть вверх по 3

далее, в первом случае могут быть 3 кейса, по остатку от деления D на 3. Если 0, то "-2" не понадобится, если 1, то можно будет обойтись одним нажатием на "-2", иначе двумя. Для D<0 - аналогично.

и всё можно решить формулами, без цикла, за O(1)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Для -3 ваша программа выведет 1, когда как правильный ответ 4 (+3-2-2-2).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы