簡體   English   中英

python - 如何在數字的恆定總和等於9 python的數字序列中找到特定數字?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM