sde19755511
?>

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

Информатика

Ответы

perfectorg
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
Гаевая1290

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.

koldunovan

Если число в системе с основанием х  оканчивается на 22, то

х больше или равно 0 , потому что в системах с меньшим основанием нет цифры 3

это число можно представить в виде А*Х2=2Ч=2  , где А– целое неотрицательное число

определим наибольшее возможное А  с учетом условия х больше или равно 0. Из уравнения  А*Х2=2Ч=2следует А=84-2Х/Х2

очевидно, что чем меньше  Х, тем больше А, поэтому значениене превышает  А МАКС =84-6/3^2=8ЦЕЛЫX З/2.

здесь мы подставили  X=3– наименьшее допустимое значение  [

остается перебрать все допустимые значения A (от 0 до A MAX =8), решая для каждого из них уравнение  A*X2+2X+2=86

относительно X  , причем нас интересуют только натуральные числа  х больше или равно 0

получаем

при  :  A=0 X=42

при  : A=1 решения – не целые числа

при  :A=2 X =62

при  :A=3.4.5.6.7.8 решения – не целые числа

таким образом, верный ответ: 6, 42.

Wlad967857
Рассмотрим случай, когда запись числа 86 в системе счисления с основанием x состоит из 3 цифр.
В этом случае x должно быть таким, что x^2 <= 86 < x^3
Если x=3, то 3^2 <= 86 < 3^3 ⇒ 9 <= 86 < 27 - не выполняется
Если x=4, то 4^2 <= 86 < 4^3 ⇒ 16 <= 86 < 64 - не выполняется
Если x=5, то 5^2 <= 86 < 5^3 ⇒ 25 <= 86 < 125 - выполняется
86(10) = 321(5) - не подходит
Если x=6, то 6^2 <= 86 < 6^3 ⇒ 36 <= 86 < 216 - выполняется
86(10) = 222(6) - подходит (2*6^2+2*6+2 = 72+12+2 = 86)
ответ: 6

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

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

Популярные вопросы в разделе

smirnovaL1286
Kharkina1328
Андреевнатест707
Guru-tailor
MislitskiiSergei1403
marusyamr
M10M11M12
Rakitin
diana-kampoteks
akakne86
BekturMagometovich189
goodsled
tigran87-87
purchase
magazintrofey