Top.Mail.Ru
Ответы

Помогите, пожалуйста, решить задачу по программированию на с++

Группа альпинистов пытается покорить вершину горы. Каждый день они поднимаются вверх на определённое расстояние, но ночью из-за сложных условий (лавины, камнепады) их лагерь сползает вниз.

Ваша задача — создать программу, которая:

Запрашивает у пользователя:
Общее расстояние до вершины (S, в метрах).

Расстояние, которое группа проходит за день (D, в метрах).

Расстояние, на которое группа сползает за ночь (N, в метрах).

Рассчитывает, на какой день группа достигнет вершины.
Формат ввода
Программа запрашивает три натуральных числа: S, D, N.

Формат вывода
Программа должна вывести одно натуральное число — номер дня, на который группа достигнет вершины в формате:

Группа достигнет вершины на [число] день.
Пример 1
Ввод:
10
3
2
Вывод: Группа достигнет вершины на 8 день.
Пример 2
Ввод
87
17
5
Вывод:Группа достигнет вершины на 7 день.
Примечания
Гарантируется, что:

D > N (группа каждый день продвигается вперёд).

D < S (группа не может достичь вершины за один день).
РЕШЕНИЕ БЕЗ ЦИКЛОВ ФУНКЦИЙ И ТД!!!! ТОЛЬКО С ПОМОЩЬЮ ЦЕЛОЧИСЛЕННОЙ АРИФМЕТИКИ. как я поняла, нужно составить рекуррентную формулу просто
никакие библиотеки, кроме iostream - не подключать

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Высший разум
1мес
12345678910111213
 #include <iostream> 
using namespace std; 
int main() { 
    int s, d, n, r = 0, m = 0; 
    cin >> s >> d >> n; 
    while (true) { 
        r += d; 
        ++m; 
        if (s <= r) break; 
        r -= n; 
    } 
    cout << m << '\n'; 
} 
Аватар пользователя
Профи
1мес

Вот решение задачи на C++ с использованием только целочисленной арифметики, без циклов, функций и других сложных конструкций, только с помощью математических вычислений:

```cpp
#include <iostream>

int main() {
int S, D, N;
std::cin >> S >> D >> N;

// Рассчитываем количество полных дней (когда группа поднимается и спускается)
int days = (S - D) / (D - N) + 1;

// Проверяем, нужно ли добавить дополнительный день
if ((S - D) % (D - N) != 0) {
days += 1;
}

std::cout << "Группа достигнет вершины на " << days << " день." << std::endl;

return 0;
}
```

Объяснение решения:

1. Каждый день группа продвигается вперед на (D - N) метров (поднимается на D, но спускается на N).
2. В последний день группа достигнет вершины без спуска ночью.
3. Поэтому сначала вычисляем расстояние без последнего дня: S - D
4. Затем делим это расстояние на ежедневный прогресс (D - N)
5. Добавляем 1 день (последний день, когда группа достигнет вершины)
6. Если есть остаток от деления, добавляем еще один день

Пример работы:
Для ввода 10 3 2:
(10 - 3) / (3 - 2) + 1 = 7 / 1 + 1 = 8 дней

Для ввода 87 17 5:
(87 - 17) / (17 - 5) + 1 = 70 / 12 + 1 = 5 + 1 = 6
Так как 70 % 12 = 10 ≠ 0, добавляем еще 1 день, итого 7 дней