Не все юные программисты любят математику; есть и такие, у которых нелады с грамотностью. Но фокусы и приключения со словами и числами, думаю, всякому интересны.
Наступил 2002 год. И, как недавно заметил Альфред Посаментиер (Madam, I’m 2002 a Numerically Beautiful Year http://www.nytimes.com/2002/01/02/opinion/02POSA.html), профессор математики и декан педагогической школы при колледже нью-йоркского университета: «Теперь можно констатировать, что мы последнее в наступившем тысячелетии поколение, прожившее сразу в двух палиндромических годах 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. Увы, ничего не получилось.
17050517 + 71505071 = 88555588. А вот теперь действительно ура. :-)
Вот ведь она какая бывает, математика. Думаю, у тех, кто доселе был к ней равнодушен, этот фокус засветил в глазах огонек.
А теперь попробуйте свои силы в решении следующих проблем:
1. Написать программу, которая будет осуществлять процесс получения палиндромического числа из заданного описанным путем.
2. Найти самое неудачное четырехзначное число, имеющее самую длинную цепочку непалиндромических сумм.
Ниже приведено решение задачи о поиске палиндромов в текстовом файле, выполненное в среде программирования Turbo Pascal (задачи и их решения на Turbo Pascal см. на http://sapisoft.h1.ru/pascal.html).
Поиск палиндромов
Задача:
В тексте слова отделяются друг от друга пробелами. В конце предложения стоит точка. Найти все слова-перевертыши.
Необходимые условия:
Программа должна читать исходные данные из файла input.txt, содержащего исследуемый текст. Файл output.txt должен содержать список всех слов-палиндромов, разделенных пробелами.
Решение:
Программа читает текст из файла input.txt, удаляет знаки пунктуации, затем переводит все буквы в нижний регистр и с помощью функции Perev логического типа проверяет, является ли каждое из слов исследуемого текста палиндромом:
Приведем еще несколько задач для реализации в Turbo Pascal или любой другой среде программирования.
1. Найти самый длинный палиндром в тексте. Если таких слов несколько, взять первое попавшееся. Интерфейс прежний программа должна читать текст из файла input.txt и выводить самое длинное слово в файл output.txt.
2. Дан одномерный массив натуральных чисел a[1], a[2],...,a[1000]. Определить максимальное количество палиндромов.
3. Из двух натуральных чисел составить наибольший возможный палиндром, максимально приближенный к первоначальной последовательности цифр. Опять же, исходные числа читаются из файла input.txt, полученное число или сообщения о невозможности построения такого числа выводятся в файл output.txt.
Примеры входного и выходного файлов приведены в таблице.