for i, j in zip(s, num):
expr = ''
num = to_new_base(n, 5)
for n in xrange(int('44444444', 5)):
return num
num = '{0:0>8}'.format(''.join(s[::-1]))
n = n // new_base
s.append(str(n % new_base))
while n:
s.append('0')
if n == 0:
s = []
d = {'0':'', '1':'+', '2':'-', '3':'*', '4':'/'}
from __future__ import division # for 2.x version
А придумал я так: для того чтобы перебрать все возможные варианты вставки символов промежутков (а их пять: либо пустая строка, либо +, -, *, /), я представлял их как варианты числа по основанию 5, дополненные слева нулями. Длина такого числа восемь символов, поскольку цифр девять, и между ними тогда имеется восемь промежутков. Нули соответствуют пустым строкам, все остальные арифметическим операциям. Вот что получилось:
Я не учился программированию, и реализовал задачу, как придумал. Поэтому у меня есть вопрос: «Как это можно было сделать лучше?».
Пусть задача поставлена так: есть строка цифр 123456789 (пусть я и правда не очень интересуюсь нулем), между которыми можно в любых местах поставить 4 арифметических операции (+, -, *, /) или не ставить ничего (то есть ставить пустую строку, тогда образуются двух- и более -значные числа) так, чтобы общее выражение давало в результате 100, как в примерах из книги выше. Ничего другого нельзя, никаких скобок, никаких перестановок, никаких дублей, никаких выкидываний.
Первое из этих решений я нашел еще в начальной школе на олимпиаде по математике, и теперь подумав, что, может быть, та победа повлияла на мое будущее становление, я решил воздать должное этой задаче и найти все возможные решения, написав соответствующий скрипт на Python.
В «Занимательной арифметике» известного популяризатора наук Якова Исидоровича Перельмана в конце первой главы я нашел пример следующих «Арифметических курьезов»:
Алгоритмы / Как сделать из 123456789 число 100 или 0 | Gliffer
Комментариев нет:
Отправить комментарий