Загрузка...

Помогите с задачей по C++

Тема в разделе C/C++ создана пользователем Juliyus 24 май 2023. 235 просмотров

  1. Juliyus
    Juliyus Автор темы 24 май 2023 1 16 авг 2022
    Специальный агент Василий пришел на полигон для тренировки своей стрельбы по мишеням. Для того, что бы быть уверенным в том, что его тренировка прошла успешно, он решил сделать ровно n� выстрелов из своего пистолета по мишеням. Его пистолет имеет магазин на m� патронов, который, разумеется, изначально не заряжен.
    Василий может полностью перезарядить свой пистолет за a� секунд, или доложить в магазин один патрон за b� секунд. Один выстрел занимает ровно одну секунду. Помогите ему посчитать, за какое минимальное время Василий сможет совершить ровно n� выстрелов. Разумеется, он не может выстрелить из пустого пистолета и не может положить новый патрон в уже полный магазин.
    Формат входных данных

    В первой строке входных данных находятся четыре целых числа n�, m�, a� и b� (1≤n,m,a,b≤1041≤�,�,�,�≤104) — число выстрелов, которое необходимо сделать, размер магазина пистолета, время полной перезарядки магазина и время зарядки одного патрона.
    Формат выходных данных

    Выведите одно число — минимальное время, которое понадобится агенту, что бы совершить ровно n� выстрелов.
    Примечания

    В тесте из условия Василий должен один раз полностью зарядить пистолет, два раза выстрелить, потом доложить один патрон и выстрелить еще раз.
    входные данныевыходные данные3 2 1 1

    5
     
  2. ChatGPT
    ChatGPT 24 май 2023 2250 14 мар 2023
    Juliyus, для решения этой задачи можно использовать простую логику. Если размер магазина больше или равен количеству выстрелов, которые нужно сделать, то Василий может сделать все выстрелы без перезарядки. В противном случае, он должен сделать несколько полных перезарядок и доложить оставшиеся патроны.

    Для решения задачи можно использовать следующий алгоритм:
    1. Если m >= n, то Василий может сделать все выстрелы без перезарядки, и время, за которое он это сделает, будет равно n.
    2. Если m < n, то Василий должен сделать k полных перезарядок и доложить оставшиеся патроны. Количество полных перезарядок можно вычислить как k = ceil((n - m) / (m - 1)), где ceil - функция округления вверх. Время, за которое Василий сделает k полных перезарядок, будет равно k * a. Оставшиеся патроны он доложит за время (n - m * (k - 1) - 1) * b. Время, за которое Василий сделает все выстрелы, будет равно k * a + (n - m * (k - 1) - 1) * b.

    Например, для входных данных 3 2 1 1 ответ будет равен 5. Если тебе нужна помощь с кодом на C++, я могу помочь тебе написать его.
     
  3. lolban_inactive3362909
    Код
    #include <iostream>
    #include <algorithm>

    using namespace std;

    int main() {
    int n, m, a, b;
    cin >> n >> m >> a >> b;

    int time = 0;
    while (n > 0) {
    if (n >= m) {
    time += min(a, m * b) + m;
    n -= m;
    } else {
    time += min(a, n * b) + n;
    n = 0;
    }
    }

    cout << time << endl;

    return 0;
    }
     
  4. Juliyus
    Juliyus Автор темы 24 май 2023 1 16 авг 2022
    Спасибо! Работает)
     
Загрузка...
Top