Предмет: Информатика, автор: mariyatemizkan

Срочно С++
Разбей на пары
Алгоритм получает на вход натуральное число N⩾10
и строит по нему новое число R
следующим образом:

1. Все пары соседних цифр в десятичной записи N
справа налево рассматриваются как двузначные числа (возможно, с ведущим нулём).

2. Из списка полученных на предыдущем шаге двузначных чисел выделяются наибольшее и наименьшее.

3. Результатом работы алгоритма становится разность найденных на предыдущем шаге двух чисел.

Реализуйте данный алгоритм для входного числа и выведите полученную разность. Не используйте операции над строковыми данными— рассматривайте входные данные как число, а не строку. Списки (векторы) и другие контейнеры также использовать нельзя.

Формат входных данных
На вход подается одно число 10⩽N⩽1018
.

В языке С++ используйте тип данных long long.

Формат выходных данных
Выведите одно число — результат работы алгоритма.

Замечание
В первом примере у нас есть только одна пара цифр.

Во втором примере пар цифр две: 00
и 01
. Они соответствуют числам 0
и 1
.

В третьем примере число разбивается на пары 89
, 67
, 45
, 23
, 01
.

Ввод
Вывод
99
0
100
1
123456789
88

Ответы

Автор ответа: savaseregin
0

Код решения на C++:

#include <iostream>

using namespace std;

int main() {

   long long n;

   cin >> n;

   int prev = -1, max_num = -1, min_num = 10;

   while (n >= 10) {

       int d1 = n % 10;

       n /= 10;

       int d2 = n % 10;

       if (prev != -1) {

           int num = d1 * 10 + d2;

           if (num > max_num) max_num = num;

           if (num < min_num) min_num = num;

       }

       prev = d2;

   }

   cout << max_num - min_num << endl;

   return 0;

}

Пояснение решения:

Считываем входное число n.

Инициализируем переменные prev, max_num и min_num значением -1, -1 и 10 соответственно. Переменная prev будет хранить предыдущую цифру (начально равна -1), переменная max_num будет хранить максимальное двузначное число, а min_num будет хранить минимальное двузначное число (начально равна 10).

В цикле пока n >= 10, на каждой итерации:

Получаем последнюю цифру числа n и сохраняем её в d1.

Делим n на 10 и получаем следующую цифру числа n и сохраняем её в d2.

Если это не первая итерация цикла (т.е. prev не равно -1), то формируем двузначное число из цифр prev и d1 и проверяем, является ли оно максимальным или минимальным. Если да, то соответственно обновляем переменные max_num и min_num.

Сохраняем d2 в prev.

Выводим результат — разность max_num - min_num.

Код написан на C++, потому что задача требует именно этого языка программирования. Однако, этот алгоритм легко можно реализовать и на других языках программирования.

Похожие вопросы
Предмет: Математика, автор: stasivasuk44
Предмет: Биология, автор: stepanenkogali
1. Разделите характеристики естественных биогеоценозов и агроценозов.
А) естественный биогеоценоз Б) агроценоз
1) круговорот веществ практически замкнут
2) поток вещества не замкнут
3) видовой состав определяется максимальной продуктивностью
4) складывается под действием естественного отбора
5) способен к саморегуляции
6) слагается из большого количества видов.
2. Расположите этапы смены растительных сообществ (сукцессии), происходящие после вырубки елового леса в хронологической последовательности:
А) вытеснение елью другой растительности
Б) развитие травянистых растений
В) появление всходов ели
Г) развитие кустарников
Д) появление светолюбивых деревьев – березы, осины
Е) вырубка елового леса
3. В пищевых цепях экосистем:
1) часть содержащейся в пище энергии используется на жизнедеятельность организмов
2) часть энергии рассеивается в виде тепла
3) вся энергия пищи преобразуется в химическую
4) значительная часть энергии запасается в виде молекул АТФ
5) происходит колебание численности популяции
6) от звена к звену биомасса уменьшается.
Предмет: Математика, автор: fjcyrxd196