Найти количество "правильных" чисел - Pascal

Узнай цену своей работы

Формулировка задачи:

Приветствую и прошу о помощи. Вводится переменная x, которая обозначает длину натурального ряда чисел (если ввести 10, то подразумевается,что мы взяли 1,2,3,4,5,6,7,8,9,10), максимальное значение x=100000. Узнать, сколько в натуральном ряду с длиной x "правильных" чисел, правильным числом считаем то, у которого четные и нечетные цифры чередуются.

Решение задачи: «Найти количество "правильных" чисел»

textual
Листинг программы
  1. var x, n, p, mask_h, mask_l, hi, lo: longint;
  2. label qt;
  3. begin
  4.   readln(x);
  5.   n := 0;
  6.   p := 0;
  7.   hi := 9;
  8.   mask_h := 1;
  9.   while x > hi do
  10.     begin
  11.       hi := hi * 10 + 9;
  12.       mask_h := mask_h * 10 + p mod 2;
  13.       inc(p)
  14.     end;
  15.   if p > 0
  16.     then begin
  17.       dec(p);
  18.       mask_l := mask_h div 10;
  19.       for hi := 1 to 9 do
  20.         for lo := 0 to 9 do
  21.           if hi <> lo
  22.             then if mask_h * hi + mask_l * lo <= x
  23.               then inc(n)
  24.               else goto qt
  25.     end;
  26.   qt:
  27.   n := n + p * 81;
  28.   writeln(n);
  29.   readln
  30. end.

Объяснение кода листинга программы

  1. Объявление переменных:
    • x, n, p, mask_h, mask_l, hi, lo - переменные типа longint (целочисленный тип данных), которые будут хранить значения.
  2. Ввод значения переменной:
    • readln(x) - пользователь вводит значение x.
  3. Инициализация переменных:
    • n := 0 - переменной n присваивается значение 0.
    • p := 0 - переменной p присваивается значение 0.
    • hi := 9 - переменной hi присваивается значение 9.
    • mask_h := 1 - переменной mask_h присваивается значение 1.
  4. Цикл для определения верхней границы чисел:
    • while x > hi do - пока x больше hi выполняется следующий блок команд.
      • hi := hi * 10 + 9 - переменной hi присваивается новое значение, умноженное на 10 и увеличенное на 9.
      • mask_h := mask_h * 10 + p mod 2 - переменной mask_h присваивается новое значение, умноженное на 10 и увеличенное на остаток от деления p на 2.
      • inc(p) - увеличивает значение переменной p на 1.
  5. Условие и вложенный цикл:
    • if p > 0 then - если p больше 0, выполняется следующий блок команд.
      • dec(p) - уменьшает значение p на 1.
      • mask_l := mask_h div 10 - переменной mask_l присваивается значение mask_h деленное на 10.
      • Цикл for hi := 1 to 9 do - переменная hi перебирает значения от 1 до 9, включительно.
      • Вложенный цикл for lo := 0 to 9 do - переменная lo перебирает значения от 0 до 9, включительно.
        • if hi <> lo then - если hi не равно lo, выполняется следующий блок команд.
        • if mask_h * hi + mask_l * lo <= x then - если результат выражения не больше x, выполняется следующий блок команд.
          • inc(n) - увеличивает значение переменной n на 1.
          • else goto qt - иначе выполняется переход к метке qt.
  6. Метка и дополнительный подсчет:
    • qt: - метка qt.
      • n := n + p * 81 - к значению переменной n прибавляется произведение p на 81.
  7. Вывод результата и ожидание ввода:
    • writeln(n) - выводится значение n.
    • readln - ожидание ввода перед завершением программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы