#python #python-3.x
#python #python-3.x
Вопрос:
вот подсказка: постройте числовой треугольник в соответствии со следующими правилами:
- первая строка содержит начальный номер
- каждая из новых строк имеет на одно число больше, чем предыдущее
- каждое число — это указанное большее количество, чем последнее
- перед добавлением в «треугольник» убедитесь, что все символы многозначных чисел складываются вместе, образуя однозначное число
- возвращает сумму последней строки в «треугольнике»
вот мой ответ: первая функция выполняет четвертое требование, она добавляет цифры числа до тех пор, пока не останется только одна цифра. пример: 123 = 1 2 3 = 6. Вторая функция принимает s (начальное значение), d (приращения) и r (количество строк). Он создает boxnum, который представляет собой общее количество ячеек в треугольнике и сколько раз я должен добавить приращение к предыдущему значению. если r = 99 999, весь код будет повторяться столько раз, и это превысит ограничение по времени, что является моей проблемой. у меня также есть проблема с хранилищем, потому что каждое значение добавляется в список, когда на самом деле мне нужна только последняя строка. Я не уверен, как переписать и сократить свой код.
def multidigit(x):
numsum = 0
if x < 9:
return(x)
else:
for number in str(x):
numsum = int(number)
if numsum > 9:
return(multidigit(numsum))
else:
return(numsum)
def sumOfLastRow(s, d, r):
rowslist = []
rowslist.append(multidigit(s))
incrementnum = s
boxnum = 0
for i in range(r 1):
boxnum = boxnum i
for i in range(boxnum-1):
incrementnum = incrementnum d
if incrementnum > 9:
incrementnum = multidigit(incrementnum)
rowslist.append(incrementnum)
splitlist = rowslist[-r:]
rowslist.clear()
total = 0
for i in range(len(splitlist)):
total = total splitlist[i]
return(total)
Ответ №1:
if x < 9: return(x)
Это выглядит неправильно.
Вероятно, вы начали с ошибки бесконечного цикла в случае x == 9,
а затем добавили финал else
, чтобы исправить его.
Бьюсь об заклад, вы хотели
if x <= 9:
return int(x)
Намного проще
return sum(map(int, str(x)))
Вы могли бы использовать аналогичную идиому при вычислениях total
.
for i in range(r 1):
boxnum = boxnum i
Здесь нет необходимости в цикле, поскольку доступно решение в квадратичной замкнутой форме.
https://dev.to/alisabaj/the-gauss-sum-and-solving-for-the-missing-number-996