На вход программы подаются прописные латинские буквы, ввод этих символов заканчивается точкой. Напишите эффективную по времени работы и по используемой памяти программу , которая будет определять, можно ли переставить эти буквы так, чтобы получился палиндром (палиндром читается одинаково слева направо и справа налево). Программа должна вывести ответ «Да» или «Нет», а в случае ответа «Да» – еще и сам полученный палиндром (первый в алфавитном порядке). На языке паскаль ABC
Пример входной строки:
GAANN
Пример выходных данных:
Да
ANGNA
я решил эту задачу вот так:
var count: array['A'..'Z'] of integer;
i, n: integer;
c, v: char;
begin
writeln ('Введите слово и поставьте точку ');
read(c);
while c <> '.' do begin {ввод символов до точки}
count[c] := count[c] + 1;
read(c);
end;
n := 0;
for c:='A' to 'Z' do {подсчет количества нечетных символов}
if count[c] mod 2 = 1 then begin
v := c;
Inc(n);
end;
if n > 1 then {возможно ли составить палиндром}
writeln('Нет')
else begin
writeln('Да');
for c:='A' to 'Z' do {вывод палиндрома в алфавитном порядке}
for i:=1 to count[c] div 2 do
write(c);
if n = 1 then write(v); {вывод центрального символа}
for c:='Z' downto 'A' do
for i:=1 to count[c] div 2 do
write(c);
end;
end.
Возможно ли ее решить другим способом?