題解|ZeroJudge d235. 10929 - You can say 11

【題目】d235. 10929 - You can say 11

題解

d235.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while True:
inp = input()
if inp == "0":
break
else:
a = list(inp)
for i in range(len(a)):
a[i] = int(a[i])
sum1, sum2 = 0, 0
for i in range(0, len(a), 2):
sum1 += a[i]
for i in range(1, len(a), 2):
sum2 += a[i]
if abs((sum1 - sum2)) % 11 == 0:
print(inp, "is a multiple of 11.")
else:
print(inp, "is not a multiple of 11.")

解說

本題要求我們輸出:輸入的資料是否屬於11的倍數。
這裡,我們要來複習一下11的倍數判別法…
如果一個數是11的倍數,他的奇數位數字之和跟偶數位數字之和的差會等於0或是11的倍數,例如

1672

其奇數位數字是1跟7、偶數位數字是6跟2
abs((1+7)-(6+2))=0
所以1672是11的倍數,實際驗算發現1672/11=152.0

再舉個例子,像是

125

其奇數位數字是1跟5、偶數位數字是2
abs((1+5)-2)=4
4不是11的倍數,所以125不是11的倍數
實際驗算發現125/11=11.36
確實不是11的倍數

那我們就用這個特性來解這題

1
2
3
4
while True:
inp = input()
if inp == "0":
break

這段的意思是重複執行,直到輸入0

6
7
8
a = list(inp)
for i in range(len(a)):
a[i] = int(a[i])

以上斷落的意思是說:我先把數字依數位存進list中,例如1234在list中會變成[1,2,3,4]

10
11
12
13
for i in range(0, len(a), 2):
sum1 += a[i]
for i in range(1, len(a), 2):
sum2 += a[i]

這裡就是像前面所說的,執行11的倍數判別

14
15
16
17
if abs((sum1 - sum2)) % 11 == 0:
print(inp, "is a multiple of 11.")
else:
print(inp, "is not a multiple of 11.")

最後就是輸出結果!

結語

以上就是本題題解。
倘內容有誤或仍有疑問,歡迎在下方留言區留言!