Не все юные программисты любят математику; есть и такие, у которых нелады с грамотностью. Но фокусы и приключения со словами и числами, думаю, всякому интересны.

Наступил 2002 год. И, как недавно заметил Альфред Посаментиер (Madam, I’m 2002 –– a Numerically Beautiful Year —), профессор математики и декан педагогической школы при колледже нью-йоркского университета: «Теперь можно констатировать, что мы последнее в наступившем тысячелетии поколение, прожившее сразу в двух палиндромических годах –– 1991 и 2002».

Палиндром (от греческого palindromeo –– бегу назад) –– это слово, фраза или стих, одинаково читающиеся слева направо и справа налево. В математике палиндромы (перевертыши) –– это числа, которые читаются одинаково в обоих направлениях. В русском языке хорошо известны такие перевертыши:

Кармен не мрак.

А роза упала на лапу Азора.

Аргентина манит негра.

На в лоб, болван.

Чин зван мечем навзничь (В. Хлебников).

Есть палиндромические слова и выражения и в английском языке. Например,

Madam, I’m Adam.

Nurses run.

Rotator.

Reviver.

Палиндромические числа не просто красивы, у них есть еще ряд замечательных свойств. Например, возьмем любое число и запишем его в обратном порядке. Если мы начнем эти два числа складывать, в сумме рано или поздно получим палиндромическое число. Продемонстрируем это на примерах.

Пример 1

3724 + 4273 = 7997. Ура! :-)

Пример 2

865 + 658 = 1433. Не палиндромическое число, продолжим процесс сложения .

1433 + 3341 = 4774. Ура! :-)

Пример 3

9238 + 8329 = 17567. Похоже, придется продолжить.

17567 + 76571 = 94138. Сложим еще раз.

94138 + 83149 = 177287. Дальше.

177287 + 782771 = 960058. Увы, ничего не получилось.

960058 + 850069 = 1810127.

1810127 + 7210181 = 9020308. Попробуем еще разок.

9020308 + 8030209 = 17050517. Кажется, мое терпение вот-вот лопнет.

17050517 + 71505071 = 88555588. А вот теперь действительно ура. :-)

Вот ведь она какая бывает, математика. Думаю, у тех, кто доселе был к ней равнодушен, этот фокус засветил в глазах огонек.

А теперь попробуйте свои силы в решении следующих проблем:

1. Написать программу, которая будет осуществлять процесс получения палиндромического числа из заданного описанным путем.

2. Найти самое неудачное четырехзначное число, имеющее самую длинную цепочку непалиндромических сумм.

Ниже приведено решение задачи о поиске палиндромов в текстовом файле, выполненное в среде программирования Turbo Pascal (задачи и их решения на Turbo Pascal см. на ).

Поиск палиндромов

Задача:

В тексте слова отделяются друг от друга пробелами. В конце предложения стоит точка. Найти все слова-перевертыши.

Необходимые условия:

Программа должна читать исходные данные из файла input.txt, содержащего исследуемый текст. Файл output.txt должен содержать список всех слов-палиндромов, разделенных пробелами.

Решение:

Программа читает текст из файла input.txt, удаляет знаки пунктуации, затем переводит все буквы в нижний регистр и с помощью функции Perev логического типа проверяет, является ли каждое из слов исследуемого текста палиндромом:

program task_15; var txt: string; i,n: integer; f: text; Function Perev(str:string):boolean; var s: string; k: integer; begin s:=''; for k:=length(str) downto 1 do s:=s+str[k]; if s=str then Perev:=True else Perev:=False; end; begin assign(f,'input.txt'); reset(f); readln(f,txt); close(f); for i:=1 to length(Txt) do begin case Txt[i] of 'А'..'П':Txt[i]:=Chr(ord(Txt[i])+32); 'Р'..'Я':Txt[i]:=Chr(ord(Txt[i])+80); 'A'..'Z':Txt[i]:=Chr(ord(Txt[i])+32); end; n:=1; assign(f,'output.txt'); rewrite(f); for i:=1 to length(txt) do begin if (Txt[i]=' ') or (i=length(txt)) then begin if Perev(Copy(Txt,n,i-n)) then writeln(f,copy(Txt,n,i-n));n:=i+1; end; end; close(f); end.

Приведем еще несколько задач для реализации в Turbo Pascal или любой другой среде программирования.

1. Найти самый длинный палиндром в тексте. Если таких слов несколько, взять первое попавшееся. Интерфейс прежний — программа должна читать текст из файла input.txt и выводить самое длинное слово в файл output.txt.

2. Дан одномерный массив натуральных чисел a[1], Таблица 1a[2],...,a[1000]. Определить максимальное количество палиндромов.

3. Из двух натуральных чисел составить наибольший возможный палиндром, максимально приближенный к первоначальной последовательности цифр. Опять же, исходные числа читаются из файла input.txt, полученное число или сообщения о невозможности построения такого числа выводятся в файл output.txt.

Примеры входного и выходного файлов приведены в таблице.