В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
0Assistant0
0Assistant0
24.08.2021 19:55 •  Информатика

Напишите, , программу, которая составляет из цифр введённой строки число-палиндром максимальной длины (которое читается одинаково слева направо и справа налево). если таких чисел несколько, нужно вывести минимальное из них. все имеющиеся цифры использовать не обязательно, но количество цифр в ответе должно быть максимально возможным. язык программирования паскаль входная строка содержит цифры (по крайней мере, одну) и, возможно, другие символы. программа должна вывести число-палиндром максимальной длины, которое можно составить из цифр входной строки. примеры входные данные for i: =99921 downto 2 выходные данные 29192

Показать ответ
Ответ:
akinfijevsp058du
akinfijevsp058du
09.10.2020 10:44
PascalABC.NET 3.4.2, сборка 1864 от 11.11.2018Внимание! Если программа не работает, обновите версию!

begin

 var s := ReadlnString;

 var s1 := s.Where(t -> t in ['0'..'9']).Sorted.GroupBy(t -> t)

     .Select(c -> (c.Key, c.Count)).OrderBy(t -> t[0]).ToArray;

 var s2 := s1.Where(t -> t[1] > 1).Select(t -> t[0] * (t[1] div 2))

     .JoinIntoString('').Replace('0', '');

 var s3 := s1.Where(t -> t[1] = 1);

 if s3.Count > 0 then s2 := s2 + s3.Select(t -> t[0]).First + s2.Inverse

 else s2 := s2 + s2.Inverse;

 s2.Println

end.

Примерfor i:=99921 downto 229192
0,0(0 оценок)
Ответ:
alexxxay
alexxxay
09.10.2020 10:44

program RawTcherv;

 

function IncPost(var I:integer):integer;

begin

 Result:=I;

 Inc(I);

end;

 

// из символов 1...9 из входной строки составить палиндром с минимальным значением

function (const S:string):string;

var

 A:array[1..9] of byte;

 I,J,Fino,Cur,Center:integer;

begin

 FillChar(A{%H-},sizeof(A),0);

 // вычисляем количество разных цифр, встреченных во введённой строке

 For I:=1 to Length(S) do

   if S[I] in ['1'..'9'] then

     Inc(A[ord(S[I])-ord('0')])

   else

     break;

 // максимальная длина палиндрома равна длине строки

 Cur:=1;

 Center:=-1;

 SetLength(Result,Length(S));

 // составляем палиндром. В начало вставляем половину всех цифр от мин. к макс.

 For I:=1 to 9 do begin

   // поиск минимального числа, которое можно вставить в центр

   if (A[I] mod 2=1) and (Center<0) then

     Center:=I;

   // вставляем в начало строки половину символов

   Fino:=A[I] div 2;

   For J:=1 to Fino do

     Result[IncPost(Cur)]:=chr(I+ord('0'));

   // оставшуюся половину вставим потом

   A[I]:=Fino;

 end;

 // вставляем центральный символ

 if Center>0 then

   Result[IncPost(Cur)]:=chr(Center+ord('0'));

 // вставляем в обратном порядке символы палиндрома

 For I:=9 downto 1 do begin

   For J:=1 to A[I] do

     Result[IncPost(Cur)]:=chr(I+ord('0'));

 end;

 // восстанавливаем длину строки

 SetLength(Result,Cur-1);

end;

 

procedure Test(const S:string);

var

 S1:string;

begin

 S1:=(S);

 Writeln('Orig=',S);

 Writeln('Pal =',S1);

 Writeln('Diff=',Length(S)-Length(S1));

 Writeln;

end;

 

begin

 Test('9998888776665432111');

 Readln;

end.

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота