Предмет: Информатика, автор: 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++, потому что задача требует именно этого языка программирования. Однако, этот алгоритм легко можно реализовать и на других языках программирования.

Интересные вопросы