Есть ответ 👍

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

181
362
Посмотреть ответы 3

Ответы на вопрос:


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.(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 2 29192
Gulase
4,5(24 оценок)

program rawtcherv;

 

function incpost(var i: integer): integer;

begin

  result: =i;

  inc(i);

end;

 

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

function makeminpalindromemaxlength(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: =makeminpalindromemaxlength(s);

  writeln('orig=',s);

  writeln('pal =',s1);

  writeln('diff=',length(s)-length(s1));

  writeln;

end;

 

begin

  test('9998888776665432111');

  readln;

end.


13

Объяснение:

s = 0       i = 5

Действия в цикле:

1) s = s + 6 div i

2) i = i - 1

Цикл продолжает работу пока ложно (нет) условие i < 1

Вывод s

s = 0       i = 5

Действия в цикле:

1) s = s + 6 div i = 0 + 6 div 5 = 0 + 1 = 1

2) i = i - 1 = 5 - 1 = 4

4 < 1     (нет)

s = 1       i = 4

Действия в цикле:

1) s = s + 6 div i = 1 + 6 div 5 = 1 + 1 = 2

2) i = i - 1 = 4 - 1 = 3

3 < 1     (нет)

s = 2       i = 3

Действия в цикле:

1) s = s + 6 div i = 2 + 6 div 3 = 2 + 2 = 4

2) i = i - 1 = 3 - 1 = 2

2 < 1     (нет)

s = 4       i = 2

Действия в цикле:

1) s = s + 6 div i = 4 + 6 div 2 = 4 + 3 = 7

2) i = i - 1 = 2 - 1 = 1

1 < 1     (нет)

s = 7       i = 1

Действия в цикле:

1) s = s + 6 div i = 7 + 6 div 1 = 7 + 6 = 13

2) i = i - 1 = 1 - 1 = 0

0 < 1     (да)

Цикл заканчивает работу

s = 13       i = 0

Реши свою проблему, спроси otvet5GPT

  • Быстро
    Мгновенный ответ на твой вопрос
  • Точно
    Бот обладает знаниями во всех сферах
  • Бесплатно
    Задай вопрос и получи ответ бесплатно

Популярно: Информатика

Caktus Image

Есть вопросы?

  • Как otvet5GPT работает?

    otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса.
  • Сколько это стоит?

    Проект находиться на стадии тестирования и все услуги бесплатны.
  • Могу ли я использовать otvet5GPT в школе?

    Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое!
  • В чем отличия от ChatGPT?

    otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.

Подпишись на наш телеграмм канал

GTP TOP NEWS