1x(2+3/4-5)=3074 1x(2+3x45)=3074 -1x(-2+3x-45)=3074 -1x(-2-3/4-5)=3074 -1x(-2-3x45)=3074 1x(2-3x-45)=3074 1x2+3/4-5=3074 -1x-2+3/4-5=3074 1x2+3x45=3074 -1x-2+3x45=3074 1x2-3x-45=3074 -1x-2-3x-45=3074
Есть одна известная задача: как расставляя знаки математических операций и скобки между цифрами 1, 2, 3, 4 и 5, но не меняя порядок следования этих цифр, получить все числа от 1 до 100.
Вручную составить представления всех чисел не получилось. Тогда и встал вопрос о написании какой-нибудь программки, которая посчитает все автоматически. Программку писать не хотелось и так бы она и осталась ненаписанной, если бы сразу было понятно, как ее писать. Но дело в том, что ни с первого раза, ни подумав, мы не смогли составить примерный алгоритм для выполнение такой, казалось бы примитивной, задачи.
Через некоторое время мы смогли совместными усилиями придумать способ нахождения решений. И нам сразу же захотелось его реализовать. Денег, конечно, на такой программе не заработать, зато можно получить бесценный опыт в разработке алгоритмов перебора, использовании структур данных и объектно-ориентированном программировании.
В процессе написания выяснилось, что эта программа еще сложнее, чем предполагалось вначале. Например, после того, как все варианты найдены, оказалось нетривиально вывести результат в приемлемом виде. Все эти маленькие сложности только увеличили радость от решения проблемы.