Степень симметрии - 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 реализована задача на вычисление степени симметрии числа.
- Тип TDigits объявляет массив Digits, который будет содержать цифры числа N.
- Переменная N инициализируется значением 123322.
- Переменная Len инициализируется значением 0 и используется для хранения количества цифр числа N.
- В цикле repeat производится разбивка числа N на отдельные цифры и их сохранение в массиве Digits.
- Переменная Count инициализируется значением 0 и используется для подсчета количества одинаковых цифр в массиве Digits.
- В цикле for проверяется, являются ли текущая и обратная (считая от конца массива) цифры одинаковыми. Если да, то к переменной Count прибавляется единица.
- Значение переменной Count выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д