Я сделал программу, которая возьмет 5 чисел и будет использовать первые четыре, чтобы получить пятое число в качестве решения. Решения могут содержать только положительные целые числа, и единственными допустимыми операторами являются «+ - * /». Есть 11 разных способов, которыми цифры и операторы могут быть организованы с круглыми скобками. Ex "(n @ n) @ n @ n", где n представляет числа и @ представляет операторы.Удалить «дублирующиеся» формулы
У меня нет проблем с поиском всех решений, моя проблема заключается в удалении «дубликатов». Я был в состоянии удалить большинство дубликатов, используя
%Seen =();
@solutions = grep { ! $Seen{ $_ }++ } @solutions;
Однако я не могу найти способ, чтобы удалить «дубликат» формул.
Использование 21 14 2 7 для получения 34 дает нам 4 решения после удаления первых дубликатов. Здесь они находятся
21/7=3; 14+3=17; 2*17=34
21/7=3; 3+14=17; 2*17=34
21/7=3; 3+14=17; 17*2=34
21/7=3; 14+3=17; 17*2=34
Мой учитель считает эти математически одинаковыми, и поэтому все четыре из них - всего лишь одно решение. Я не могу понять, как это сделать, найти эти «дубликаты» и удалить их. Любая помощь приветствуется, спасибо.
Я считаю, что вы хотите, чтобы сравнения были '$ 1 <$ 3', а не' $ 1 <$ 2'. – jwodder
@jwodder, исправлено. – ikegami
Мне очень нравится это решение, но я не могу изменить его формат. Прямо сейчас он вернет что-то вроде «3 + 10 = 13 1 + 4 = 5; 13-5 = 8», однако я бы предпочел, чтобы он вернул «10 + 3 = 13; 4 + 1 = 5; 1-5 = 8 « Я попытался отредактировать его сам, изменив тройную проверку и значения, но я не могу понять решение (я чувствую себя довольно глупо ...) –