Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Нужна помощь с задачей, паскаль. (http://www.tehnari.ru/f41/t36821/)

геймер555 08.06.2010 18:34

Нужна помощь с задачей, паскаль.
 
На вход программы подаются прописные латинские буквы, ввод этих символов заканчивается точкой. Напишите эффективную по времени работы и по используемой памяти программу , которая будет определять, можно ли переставить эти буквы так, чтобы получился палиндром (палиндром читается одинаково слева направо и справа налево). Программа должна вывести ответ «Да» или «Нет», а в случае ответа «Да» – еще и сам полученный палиндром (первый в алфавитном порядке). На языке паскаль 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.

Возможно ли ее решить другим способом?


Часовой пояс GMT +4, время: 10:16.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.