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