суббота, 9 февраля 2013 г.

как из 123456789 получить 0

    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

Комментариев нет:

Отправить комментарий