• Предмет: Информатика
  • Автор: timtemizkan
  • Вопрос задан 5 месяцев назад

ЯЗЫК С++ СРОЧНО ОСТАЛСЯ ЧАС ДАЮ 60 БАЛЛОВ
Разбей на пары
Алгоритм получает на вход натуральное число 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
Ограничения
Время выполнения: 1 секунда
Процессорное время: 1 секунда
Память: 256 MB

Ответы

Ответ дал: savaseregin
0

Для решения данной задачи можно использовать цикл, который будет проходить по всем парам соседних цифр числа N. Необходимо хранить два числа — минимальное и максимальное из всех найденных двузначных чисел. После того, как все пары цифр будут пройдены, необходимо вычислить разность между максимальным и минимальным числом.

Пример решения на языке C++:

#include <iostream>

using namespace std;

int main() {

   long long N;

   cin >> N;

   long long prev_digit = N % 10;

   long long current_digit;

   long long min_num = 99;

   long long max_num = 0;

   N /= 10;

   while (N > 0) {

       current_digit = N % 10;

       long long num = current_digit * 10 + prev_digit;

       if (num < min_num) {

           min_num = num;

       }

       if (num > max_num) {

           max_num = num;

       }

       prev_digit = current_digit;

       N /= 10;

   }

   cout << max_num - min_num << endl;

   return 0;

}

На вход программе подается число N. Далее происходит инициализация переменных prev_digit, current_digit, min_num и max_num. Значение переменной prev_digit инициализируется последней цифрой числа N. Затем происходит цикл while, который будет выполняться, пока N больше нуля. Внутри цикла текущая цифра записывается в переменную current_digit. Далее происходит вычисление числа num, которое состоит из двух цифр. Затем это число сравнивается с текущим значением минимального и максимального чисел. Если num меньше минимального числа, то оно записывается в переменную min_num. Если num больше максимального числа, то оно записывается в переменную max_num. Затем текущая цифра записывается в переменную prev_digit, а число N делится на 10 для того, чтобы получить следующую цифру.

После того, как все пары цифр были пройдены, программа выводит разность между максимальным и минимальным числами.

Вас заинтересует