Определить, существует ли ровное число, состоящее ровно из l цифр - Pascal

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

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

Число назовем ровным, если каждая цифра числа, кроме самых крайних, меньше среднего арифметического двух ее соседних цифр. То есть, если число x = an·10n+an−1·10n−1+...+a1 ·10+a0, то для всех i = 1...(n − 1) верно, что ai < (ai−1 + ai+1)/2. Напишите программу, которая определяет, существует ли ровное число, состоящее ровно из l цифр, а если существует, то какое из них максимально. Формат входного файла Входной файл содержит единственное натуральное число l (1 ≤ l ≤ 100) — длина искомого ровного числа. Формат выходного файла В выходной файл выведите максимальное ровное число длины l или −1, если такого числа не существует. Примеры Input1.in 3 Output1.out 989

Решение задачи: «Определить, существует ли ровное число, состоящее ровно из l цифр»

textual
Листинг программы
Uses Crt;
 
Function FlagSt0(S : String) : Boolean;
var k : Byte;
Begin
  FlagSt0:=True;
  For k:=1 to Length(S) do
    If S[k]<>'0' then
    Begin
      FlagSt0:=False;
      Break;
    end;
End;
 
Function FlagRovnoe(S : String) : Boolean;
Var k : Byte;
Begin
  FlagRovnoe:=True;
  For k:=2 to Length(S)-1 do
    If Ord(S[k])-48>=(Ord(S[k-1])-48+Ord(S[k+1])-48)/2 then
    Begin
      FlagRovnoe:=False;
      Break;
    End;
End;
 
Function DecSt(S : String; k : Longint) : String;
Var ii : Byte;
    ss : String;
Begin
  ss:=S;
  ii:=Length(S);
  While ii>0 do
    If ss[ii]>'0' then
    Begin
      ss[ii]:=Chr(Ord(ss[ii])-1);
      Break;
    End
      else
      Begin
        ss[ii]:='9';
        Dec(ii);
      End;
  If k>1 then DecSt:=DecSt(ss,k-1)
    else DecSt:=ss;
End;
 
 
Var
  f,f0  : text;
  St    : String;
  L,i   : Byte;
Begin
  ClrScr;
  Assign(f0,'Input.in');
  Assign(f,'Output.out');
    Reset(f0);
    Readln(f0,L);
    Close(f0);
  St:='';
  For i:=1 to L do St:=St+'9';
  While (not FlagSt0(St)) and (not FlagRovnoe(St)) do
  Begin
    St:=DecSt(St,1);
    GoToXY(10,WhereY);
    Write(St);
  End;
    ReWrite(f);
    If FlagSt0(St) then Writeln(f,'-1')
      else Writeln(f,St);
    Close(f);
end.

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

  1. Тип программы: По всей видимости, это программа на языке Pascal, так как упоминаются ключевые слова и конструкции, характерные для этого языка, такие как Uses, Function, Var, Begin, End, Assign, Reset, Readln, Close, GoToXY, Write, ReWrite.
  2. Функции: В коде определены три функции:
    • FlagSt0 - проверяет, содержит ли строка только цифры, и возвращает True, если это так, и False в противном случае.
    • FlagRovnoe - проверяет, является ли число ровным, и возвращает True, если это так, и False в противном случае.
    • DecSt - функция, которая принимает строку и количество цифр, которые нужно удалить, и возвращает новую строку, в которой указанное количество цифр заменено на предыдущую цифру.
  3. Основная часть программы: В основной части программы выполняются следующие действия:
    • Создаются текстовые файлы для ввода и вывода данных.
    • Считывается строка из файла для ввода.
    • В цикле, пока не выполнены условия для ровного числа, программа генерирует новую строку, удаляя одну цифру за раз, и проверяет, является ли она ровным числом.
    • Если условие для ровного числа выполнено, в файл для вывода записывается -1, иначе записывается само число.
  4. Переменные: В коде определены следующие переменные:
    • f, f0 - файлы для ввода и вывода данных.
    • St - строка, в которой проверяется наличие ровного числа.
    • L, i - переменные для хранения количества цифр в строке и текущего индекса.
  5. Ошибки и оптимизации: В коде есть некоторые потенциальные проблемы и места для оптимизации:
    • Нет обработки ошибок, таких как отсутствие файла для ввода или недостаток памяти для создания новой строки.
    • Цикл может выполняться очень долго, если число очень большое. Можно оптимизировать, используя более эффективный алгоритм проверки на ровное число.
    • Нет проверки на переполнение при удалении цифр из строки.

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


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

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

9   голосов , оценка 3.889 из 5
Похожие ответы