• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Нужна помощь с задачей, паскаль.

геймер555

Ученик
Регистрация
8 Июн 2010
Сообщения
3
Реакции
0
Баллы
0
Нужна помощь с задачей, паскаль.

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

Возможно ли ее решить другим способом?
 
Последнее редактирование:
Назад
Сверху