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

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

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

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

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

textual
Листинг программы
var x, n, p, mask_h, mask_l, hi, lo: longint;
label qt;
begin
  readln(x);
  n := 0;
  p := 0;
  hi := 9;
  mask_h := 1;
  while x > hi do
    begin
      hi := hi * 10 + 9;
      mask_h := mask_h * 10 + p mod 2;
      inc(p)
    end;
  if p > 0
    then begin
      dec(p);
      mask_l := mask_h div 10;
      for hi := 1 to 9 do
        for lo := 0 to 9 do
          if hi <> lo
            then if mask_h * hi + mask_l * lo <= x
              then inc(n)
              else goto qt
    end;
  qt:
  n := n + p * 81;
  writeln(n);
  readln
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
Похожие ответы