• Дана строка из n символов(все числа), заканчивающаяся нулем. Ноль в этой строке только 1. Требуется написать программу на Паскале, которая составит число-палиндром. Если таких чисел несколько то вывести минимальное из них. Нулей в числе быть не должно. Все имеющиеся цифры использовать не обязательно, но кол-во цифр должно быть максимально возможным

Ответы 11

  • до нуля идет первое число, после нуля идет второе число
    • Автор:

      sophie16
    • 6 лет назад
    • 0
  • тут 2 числа нам даны
    • Автор:

      caracasey
    • 6 лет назад
    • 0
  • Ладно. Минуту
  • хром?
  • Ну, хром убирает перенос строки при публикации ответов. Я уже отформатировали ответ.
    • Автор:

      misael
    • 6 лет назад
    • 0
  • а ты пробовал запускать её? там 3 ответа выходит =)
    • Автор:

      bennylong
    • 6 лет назад
    • 0
  • Я потестил. Исключение - когда палиндром состоит из одной цифры. Танцую дальше.
    • Автор:

      jerry83
    • 6 лет назад
    • 0
  • Да, это своеобразные логи.
    • Автор:

      kona88
    • 6 лет назад
    • 0
  • Проверяйте
    • Автор:

      lilly41
    • 6 лет назад
    • 0
  • магия вне хогвартса запрещена =)
  • {Вариант с поиском,Пока что просто решил игнорировать 0, раз он все равно в конце}var s: string; i,j,k,l: integer; t,f: boolean; mi,mj: integer; x,y:array[boolean] of integer;begin mi := 1; mj := 0; readln(s); l := length(s); //- 1; {оканчивается на 0?} k := 1; f := true; while f and (k <= l) do   begin   f := s[k] <> '0';   if f then k := k + 1   end; x[false] := 1; y[false] := k - 1; x[true] := k + 1; y[true] := l; for f := false to true do for i := x[f] to y[f] do begin j := y[f]; while j - i >= mj - mi do   begin   t := true;   k := 0;   while t and (k <= (j - i) div 2) do     begin     t := s[i + k] = s[j - k];     k := k + 1     end;   if t then   if j - i > mj - mi then     begin     mi := i;     mj := j;     end   else   if j - i = mj - mi then     begin     k := 0;     t := true;     while t and (k <= j - i) do       begin       t := s[i + k] = s[mi + k];       if t then k := k + 1       end;     t := not t;     if t then       t := s[i + k] < s[mi + k];     if t then       begin       mi := i;       mj := j;       end     end;   j := j - 1   end end;for k := mi to mj do  write(s[k])end.----------------------------------------------{Вариант с составлением}var a: array['1'..'9'] of integer; i: integer; c: char; t: boolean; begin for c := '1' to '9' do   a[c] := 0; repeat   read(c);   if (c >= '1') and (c <= '9') then     a[c] := a[c] + 1; until c = '0'; for c := '1' to '9' do   for i := 1 to a[c] div 2 do     write(c); c := '1'; t := true; while t and (c <= '9') do   begin   if odd(a[c]) then     begin     write(c);     t := false     end;   c := succ(c)   end; for c := '9' downto '1' do   for i := 1 to a[c] div 2 do     write(c)end.
    • Автор:

      thorg5ym
    • 6 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years