#python #algorithm
Вопрос:
программа должна найти сумму(n)
G1 G2 G3 … Gn
Я написал программу на python. Это работает, когда я бегу. но если я отправлю программу на тестирование на сайте, 4 теста пройдут успешно, 5-й завершится неудачей
мой код:
import math n = int(input()) k = 0 result = 0 while n gt; 0: k = 1 num = (math.floor(k / 2) 1) sum_of_nums = num * k n -= num result = sum_of_nums result = n * k print(int(result))
первые 25 номеров: [1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, ...]
1 = (floor(k / 2) 1) * k
k = 1
2 2 = (floor(k / 2) 1) * k
k = 2
3 3 = (floor(k / 2) 1) * k
k = 3
4 4 4 = (floor(k / 2) 1) * k
k = 4
...
result = n * k
. этот код удаляет из результата (n может быть
Комментарии:
1. Может быть , попробовать
round()
вместо того, чтобы простоint()
, что всегда приведет к результату?2. результат будет только плавающим с «.0». пример: «1043.0» или «19274.0». функция int удаляет только «.0».
3. Откуда это
floor(k / 2) 1
берется? Это действительно верно для самых первых значений, но есть ли у вас доказательства того, что это верно для любого целочисленного значения? Кстати, питонический способ вычислить это-не использовать математику, а полагаться на целочисленное деление:k // 2 1
4. После второго взгляда
floor(k / 2) 1
неверно начинать с k = 8: последовательность Голомба содержит только 4 последовательных значения 8.5.
k = 8
5 последовательных 8 значений
Ответ №1:
Вот простой итеративный способ генерации последовательности Голомба:
n = 25 ns = [1] for i in range(n-1): ns.append(1 ns[i 1-ns[ns[-1]-1]]) ns
Выход:
gt;gt;gt; ns [1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9] gt;gt;gt; sum(ns) 140
nb. Я думаю, что ваш пример неверен
Комментарии:
1. 0 lt; n lt; 10^9. для работы много-много секунд, если
n = 10^9
. Мне нужно, чтобы функция работала в течение 1 секунды