[英]How to find a specific number in a sequence of number with a constant sum of digit equal to 9 python?
輸入自然數 N (1 <= N <= 1,000,000)。 將序列的第 N 個數字打印到屏幕上:9 18 27 36 45 54 63 72 81 90 108 117(它們的數字總和都等於 9)
N = 9+(int(input())-1)*9
def sumnum(N):
sum = 0
while N > 0:
d = N%10
N = N//10
sum += d
sumnum(N)
while sum != 9:
N+=1
sumnum(N)
print(N)
這是我的代碼,它得到了這個錯誤
TimeLimitError: Stopped on Line 4
您的sumnum
函數不返回任何內容,因此它永遠不會更改函數之外的sum
(或任何其他值)。 通常你會在嘗試比較一個未定義的變量時遇到錯誤,但sum
實際上是一個內置函數的名稱,所以這就是你要比較的 9 。
這是一個簡單的方法:在一個while
循環中遍歷所有數字,並通過將每個數字轉換為字符串並將其字符的 int 值相加來檢查每個數字的總和。 每次找到總和為 9 的一個時,將N
減 1。 當它達到零時,打印當前數字。
>>> N = 12
>>> i = 0
>>> while True:
... i += 1
... if sum(int(d) for d in str(i)) == 9:
... N -= 1
... if N == 0:
... print(i)
... break
...
117
這是使用帶有itertools.count()
的過濾生成器的更多代碼高爾夫-y 方法(對於大數字效率較低,因為它構建了最多 N 的序列列表,而不是僅打印最后一個元素):
>>> import itertools
>>> list(zip(range(N), (i for i in itertools.count() if sum(int(d) for d in str(i)) == 9)))[-1][-1]
117
這對我有用!
def getSum(n):
sum = 0
for digit in str(n):
sum += int(digit)
return sum
for i in range(0, 1000000):
n = i
sum = getSum(n)
if sum == 9:
print(f"{n} -- {sum}")
對字符串執行算術運算可以工作,但效率很低。 這可能會有所幫助(並且表現非常好)。 生成包含范圍 1 -> 1,000,000 的所有數字的列表,其數字總和為 9。當然,該范圍可以限制為 900,000,因為這是具有此特定屬性的小於 100 萬的最大數字。
我們還可以利用這樣一個事實,即數字之和為 9 的數也是 9 的倍數
import time
def sumdigits(n):
r = 0
while n > 0:
r += n % 10
n //= 10
return r
lon = []
start = time.perf_counter()
for i in range(9, 900001, 9):
if sumdigits(i) == 9:
lon.append(i)
end = time.perf_counter()
print(len(lon))
print(f'Duration = {end-start:.4f}')
輸出:
2002
Duration = 0.0531
數字加到 9 的數字是 9 的倍數,反之亦然。 所以數字加到9的第N個數是N*9。 所以你只需要這樣:
N = int(input("Enter N: "))
print (N*9)
如果您願意,可以添加范圍檢查以檢查 N 是否介於 1 和 1,000,000 之間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.