Присоединиться

11 класс·высокий уровень

А если возможно, то в первой строке следует вывести слово “YES”, а во

Условие

На вход программе подается набор символов, заканчивающийся точкой (в программе на языке Бейсик символы можно вводить по одному в строке, пока не будет введена точка, или считывать данные из файла). Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая сначала будет определять, есть ли в этом наборе символы, соответствующие десятичным цифрам. Если такие символы есть, то можно ли переставить их так, чтобы полученное число было симметричным (читалось одинаково как слева направо, так и справа налево). Ведущих нулей в числе быть не должно, исключение - число 0, запись которого содержит ровно один ноль.

Если требуемое число составить невозможно, то программа должна вывести на экран слово “NO”. А если возможно, то в первой строке следует вывести слово “YES”, а во второй - искомое симметричное число. Если таких чисел несколько, то программа должна выводить максимальное из них. Например, пусть на вход подаются следующие символы:Do not 911 to 09 do.В данном случае программа должна вывестиYES91019

Формат задания

Развёрнутый ответ: короткого ответа здесь нет — оценивается само рассуждение. Разбор откроется после входа.

Решение по шагам

  1. Как рассуждать

    Решение. Посчитаем сколько различных цифр в строке, занесём эти данные в массив. Затем проверим есть ли цифры встречающиеся нечётное число раз, запомним какое число встречается нечётное число раз. Проверим, есть ли цифры встречающиеся более одного раза или есть ли цифры встречающиеся один раз, при том, чтобы ноль не встречался. Если цифр встречающихся нечётное число раз более одной или условие, описанное в предыдущем предложении ложно выведем "NO"; иначе выведем "YES", а затем сначала половину каждой из цифр, начиная с девятки, затем выведем запомненную цифру, оставшуюся половину цифр. var a:array['0'..'9'] of integer;c, c_odd: char;i, k: integer;f: boolean;beginfor c:='0' to '9' do a[c]:=0;read(с);while c<>'.' dobeginif c in ['0' .. '9'] then a[c] := a[c] + 1;read(c);end;k := 0; {количество цифр, встречающихся нечетное число раз}for c := '0' to '9' doif a[c] mod 2 = 1 thenbegink := k + 1;c_odd := c;end;f := (a['0'] = 1);for c := '1' to '9' doif (a[c] >

Осталось ещё 1 шаг

  1. then f := true;if (k > 1)or not f then…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Обработка символьных строк»

А если возможно, то в первой строке следует вывести слово “YES”, а во — решение с объяснением | Lom Ai