2015-05-19 6 views
1

я пытаюсь решить this problem Я знаю, что я могу сделать это какPython треугольник квест, арифметическая операция внутри печати

for i in range(1,input()): 
    print int(str(i)*i) 

Это работает, но я не могу использовать строки, так что у меня есть идея сделать что, как

for i in range(1,input()): 
    sum+=10**i 
    print i*((1+sum)%10**i) 

for i=1 1*(1+10)%10, 

for i=2 2*((1+110)%100), 

for i=3 3*((1+1110)%1000) etc. 

Но он не работает и больше тыс 2 строки :(У кого-нибудь есть идея, как решить эту проблему? В общем, я знаю, как решить эту проблему математически, но я не знаю, как это сделать в python (не используйте строку и пишите не более двух строк)

+2

У меня есть решение. just - print i * ((11111)% 10 ** i) – Rarez

+0

Это будет работать только при n <= 6. Вам нужно будет сделать 'print i * ((11111111)% 10 ** i)', чтобы покрыть до n = 9. Мое решение ниже работает так же хорошо. –

+0

@ Rarez следует объяснить, как это работает? –

ответ

7

Что-то, что здесь помогает, это уравнение для «Repunit». Принимая уравнение для i'th Repunit на этой странице в Википедии и подставляя 10 in for b (base 10), получаем уравнение (10**i - 1)/(10 - 1) или (10**i - 1)/9. В результате получается следующая последовательность: 1, 11, 111, 1111.... Умножая на i, мы достигаем желаемого результата:

>>> for i in range(1,input()): 
... print i * (10**i - 1)/9 
5<Enter> 
1 
22 
333 
4444 
Смежные вопросы