396 подписчиков

Решение 33 задачи проекта Эйлера: Дроби, сократимые по цифрам

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

Условия задачи

Дробь 49/98 является любопытной, поскольку неопытный математик, пытаясь сократить ее, будет ошибочно полагать, что 

49/98 = 4/8

являющееся истиной, получено вычеркиванием девяток.

Дроби вида 

30/50 = 3/5

 будем считать тривиальными примерами.

Существует ровно 4 нетривиальных примера дробей подобного типа, которые меньше единицы и содержат двухзначные числа как в числителе, так и в знаменателе.

Пусть произведение этих четырех дробей дано в виде несократимой дроби (числитель и знаменатель дроби не имеют общих сомножителей). Найдите знаменатель этой дроби.

Описание работы программы

Программа для решения задачи Эйлера #33
Программа для решения задачи Эйлера #33

Дроби решил хранить в виде массивов вида:

массив[числитель,знаменатель]

Далее в цикле перебираем значения числителя и знаменателя, при этом по заданию:

  • числа двузначные (от 10 до 99)
  • дробь меньше единицы => числитель меньше знаменателя
Функция для проверки наличия одинаковых цифр в числителе и знаменателе - задача Эйлера #33
Функция для проверки наличия одинаковых цифр в числителе и знаменателе - задача Эйлера #33

Чтобы удовлетворять условию задачи дробь должна иметь одинаковые цифры в числителе и знаменателе дроби «по диагонали». Только удовлетворяющие этой проверке дроби обрабатываются программой - из них удаляется пара одинаковых цифр в функции del_nums().

Функция, упрощающая дробь - задача Эйлера #33
Функция, упрощающая дробь - задача Эйлера #33

Далее обе дроби (с повторяющимися цифрами и без них) упрощаются и сравниваются. Если они совпали, то искомая дробь найдена.

При работе функции, поиск общего множителя идёт от большего к меньшему, чтобы полученный общий делитель гарантированно был максимальным.

Найденные таким образом «нетривиальные» дроби перемножаются и ещё раз сокращаются.

Ответ на задачу:

P.S. Изначальная цель блога - получить "фидбек" в комментариях, чтобы более опытные "кодеры" указывали мне на ошибки, советовали и всячески помогали в саморазвитии.

Также приглашаю всех на мой сайт)

На нем Вы можете посмотреть ответ на задачу Эйлера 33 (когда необходима лишь небольшая подсказка) и последний, самый быстрый вариант решения.

Я подписался, а Вы?)
Я подписался, а Вы?)

В общем, добро пожаловать на канал))