1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| # 1001 -> upper:1111, lower:999 10開頭的話大的補1, 小的10變9 # 13256 -> upp34:13311, lower:13199 # 35001 -> upper:35111, lower:33999 小的要借位0, upper必然解 # 從頭開始看遇到偶數就留, 遇到奇數就找lower或upper, 看誰比較 # 靠近找lower:若10開頭10->>9補9,若非10開頭,0就不用做了, 其他偶數-1 #找upper:遇到偶數+=1,後面補1。 #abs() = 絕對值 # 去模擬多個範例, 用實例去推 def check(n): n = str(n) Len = len(n) if n[0:2] == "10": lower = "9" * (Len-1) upper = "1" * Len #print(lower, upper) #a1 = abs(int(n) - int(upper)) #a2 = abs(int(n) - int(lower)) #return min(a1, a2) else: upper = "" lower = "" for i in range(Len): if int(n[i]) % 2 == 1: upper += n[i] lower += n[i] #a1 = abs(int(n) - int(upper)) #a2 = abs(int(n) - int(lower)) #return min(a1, a2) else: if n[i] == "0": upper += "1" * (Len - i) #print(upper) ans = abs(int(n) - int(upper)) return ans else: lower += str(int(n[i]) - 1) lower += "9" * (Len - i - 1) #print(lower) #break upper += str(int(n[i])+1) upper += "1" * (Len - i - 1) #print(upper) break a1 = abs(int(n) - int(upper)) a2 = abs(int(n) - int(lower)) return min(a1, a2) #return n
#data = [135, 13256, 35001, 1001, 1, 2, 10, 11, 21] #for i in data: # print(check(i)) from sys import stdin for line in stdin: print(check(int(line)))
|