簡體   English   中英

下一個具有不同數字的數字CCC 2013 Senior 1

[英]Next Number with Distinct Digits CCC 2013 Senior 1

標題所述,第4頁上2013 CCC Senior 1問題是要找到最小的數字,該數字大於帶有不同數字的輸入。 我是編程的初學者,我找不到此代碼出了什么問題:

year = 1987
distinct = 'no'
a = []
while distinct != 'yes':
    year += 1
    for i in str(year):
        if i not in a:
            a.append(i)
            distinct = "yes"
        else:
            distinct = "no"
            break

print(year)

我認為代碼仍處於while循環中,但我不明白為什么。 上面的代碼應該在2013年打印出來。謝謝您的幫助。

您將年份加1並檢查數字是否不同的方法是正確的,並且您的代碼幾乎是正確的。 您的錯誤是您只將a[]設置為年份中的一組數字,但是每年都應將其初始化為空。 將行a = []移到year += 1並給它適當的縮進,您的代碼將起作用。 那會使您的代碼變成:

year = 1987
distinct = 'no'
while distinct != 'yes':
    year += 1
    a = []
    for i in str(year):
        if i not in a:
            a.append(i)
            distinct = "yes"
        else:
            distinct = "no"
            break

print(year)

另一種方法是使用集合,該集合將自動刪除所有重復項。 您可以檢查是否將年份字符串設置為集合會更改其大小。 因此,也許使用它,這也避免了使用諸如distinct類的狀態變量:

year = 1987
year += 1
while len(set(str(year))) != len(str(year)):
    year += 1
print(year)

如果您想要該狀態變量,或者不喜歡重復的year += 1 ,則可以執行以下操作:

year = 1987
distinct = False
while not distinct:
    year += 1
    if len(set(str(year))) == len(str(year)):
        distinct = True
print(year)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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