У меня есть вариант решения задания на CodeForces, но он не работает для всех тестовых случаев. Возможно, я неправильно понял, как реализовать это решение.

В данной программе мы пытаемся решить задачу о том, как достичь заданного этажа в лифте, используя только две кнопки "+3" и "-2". Однако, наш код не проходит тесты до конца и мы хотим узнать, в чем может быть проблема. Возможно, мы неправильно реализовали условие задачи или неправильно поняли, каким образом его решить. Вот код на 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;
}

Можете помочь нам разобраться в проблеме?
  • 19 сентября 2023 г. 9:18
Ответы на вопрос 3
Проблема в данном коде заключается в том, что он не учитывает ограничения на количество действий, а также не проверяет, можно ли достичь заданного этажа с помощью только кнопок "+3" и "-2".

Предлагаю следующее изменение кода:

#include <iostream>
#include <cmath>

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

    D = std::abs(D);

    int count = 0;

    while (D >= 5) {
        D -= 5;
        count++;
    }

    if (D > 0) {
        if (D == 1 || D == 2 || D == 3) {
            count++;
        } else if (D == 4) {
            count += 2;
        }
    }

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

    return 0;
}

В этом варианте мы сначала используем кнопку "+3" столько раз, сколько возможно, чтобы уменьшить оставшееся расстояние на 5, затем проверяем оставшееся расстояние. Если оно равно 1, 2 или 3, то мы можем достичь заданного этажа с помощью дополнительного действия. Если оставшееся расстояние равно 4, то нам не хватает одного действия для достижения заданного этажа, поэтому нам нужно два дополнительных действия.

Попробуйте использовать этот вариант кода и проверьте его для различных тестовых случаев. Надеюсь, это поможет вам решить задачу!
Для -3 ваша программа выведет 1, в то время как правильный ответ 4 (+3-2-2-2). 
 Разделите рассмотрение случаев на два: случай D > 0 и случай D < 0. В первом случае сначала нужно подняться на 3 этажа, а затем спуститься на 2 этажа. Во втором случае лучше сначала спуститься на 2 этажа, а затем подняться на 3 этажа. После этого, зависимо от значения остатка от деления D на 3, можно определить количество нажатий на кнопки "-2". Если остаток равен 0, то нажатие на "-2" не требуется. Если остаток равен 1, то достаточно одного нажатия на "-2", иначе нужно два нажатия. Вместо использования цикла, можно решить задачу с помощью формулы, что позволяет решить ее за O(1).
Похожие вопросы