Степень симметрии - Free Pascal

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

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

Помогите решить задачу
  • Степенью симметрии натурального числа называется количество пар его десятичных цифр, в которых цифры совпадают и расположены симметрично относительно середины десятичной записи этого числа. Если некоторая цифра стоит посередине десятичной записи, её тоже нужно учитывать в паре с ней самой. Найти степень симметрии числа N.
  • (N < 2·109)
  • Пример: ввод(123322) вывод(2)
Пытался сам решить, но что-то не так в программе, может посоветуете что можно изменить, или подскажете как решать такие задачи.
var
    n,t:longint;
    k,i,s,j,a:integer;
    v:array[1..199999999] of byte;
begin
    read(n);
    k:=0;i:=0;s:=0;j:=0;a:=0;
    t:=n;
    while n>0 do begin inc(k); n:=n div 10; end; //количество цифр = k
    n:=t;t:=0;
    for i:=k downto 1 do begin v[i]:=n mod 10; n:=trunc(n div 10);end; //заполнение массива цифрами
    n:=0;
    if k mod 2 <> 0 then //для нечетных чисел
        begin
            s:=(k div 2)+1;
            j:=1;
            for i:=1 to (k div 2) do
                if v[s-i]=v[s+i] then j:=j+1;
        end;
        
    if k mod 2 = 0 then //для четных чисел
        begin
        s:=k;
        for i:=1 to (k div 2) do
        begin
                if v[i]=v[s] then a:=a+1;s:=s-1;
                end;
        end;
    writeln(a);
end.

Решение задачи: «Степень симметрии»

textual
Листинг программы
program Symmetry;
 
type
  TDigits = array [0..9] of byte;
var
  N: longint;
  Len, Count, i: integer;
  Digits: TDigits;
begin
  //readln(N);
  N := 123322;
 
  Len := 0;
  repeat
    Digits[Len] := N mod 10;
    N := N div 10;
    Inc(Len);
  until N = 0;
 
  Count := 0;
  for i := 0 to (Len div 2) + (Len mod 2) - 1 do
    if Digits[i] = Digits[Len - i - 1] then
      Inc(Count);
  writeln(Count);
end.

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

В данном коде на языке Free Pascal реализована задача на вычисление степени симметрии числа.

  1. Тип TDigits объявляет массив Digits, который будет содержать цифры числа N.
  2. Переменная N инициализируется значением 123322.
  3. Переменная Len инициализируется значением 0 и используется для хранения количества цифр числа N.
  4. В цикле repeat производится разбивка числа N на отдельные цифры и их сохранение в массиве Digits.
  5. Переменная Count инициализируется значением 0 и используется для подсчета количества одинаковых цифр в массиве Digits.
  6. В цикле for проверяется, являются ли текущая и обратная (считая от конца массива) цифры одинаковыми. Если да, то к переменной Count прибавляется единица.
  7. Значение переменной Count выводится на экран.

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


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

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

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