Дана строка из n символов(все числа), заканчивающаяся нулем. Ноль в этой строке только 1. Требуется написать программу на Паскале, которая составит число-палиндром. Если таких чисел несколько то вывести минимальное из них. Нулей в числе быть не должно. Все имеющиеся цифры использовать не обязательно, но кол-во цифр должно быть максимально возможным
{Вариант с поиском,
Пока что просто решил игнорировать 0, раз он все равно в конце}
var
s: string;
i,j,k,l: integer;
t,f: boolean;
mi,mj: integer;
x,y:array[boolean] of integer;
begin
mi := 1;
mj := 0;
readln(s);
l := length(s); //- 1; {оканчивается на 0?}
k := 1;
f := true;
while f and (k <= l) do
begin
f := s[k] <> 0;
if f then k := k + 1
end;
x[false] := 1;
y[false] := k - 1;
x[true] := k + 1;
y[true] := l;
for f := false to true do
for i := x[f] to y[f] do
begin
j := y[f];
while j - i >= mj - mi do
begin
t := true;
k := 0;
while t and (k <= (j - i) div 2) do
begin
t := s[i + k] = s[j - k];
k := k + 1
end;
if t then
if j - i > mj - mi then
begin
mi := i;
mj := j;
end
else
if j - i = mj - mi then
begin
k := 0;
t := true;
while t and (k <= j - i) do
begin
t := s[i + k] = s[mi + k];
if t then k := k + 1
end;
t := not t;
if t then
t := s[i + k] < s[mi + k];
if t then
begin
mi := i;
mj := j;
end
end;
j := j - 1
end
end;
for k := mi to mj do
write(s[k])
end.
----------------------------------------------
{Вариант с составлением}
var
a: array[1..9] of integer;
i: integer;
c: char;
t: boolean;
begin
for c := 1 to 9 do
a[c] := 0;
repeat
read(c);
if (c >= 1) and (c <= 9) then
a[c] := a[c] + 1;
until c = 0;
for c := 1 to 9 do
for i := 1 to a[c] div 2 do
write(c);
c := 1;
t := true;
while t and (c <= 9) do
begin
if odd(a[c]) then
begin
write(c);
t := false
end;
c := succ(c)
end;
for c := 9 downto 1 do
for i := 1 to a[c] div 2 do
write(c)
end.
