總網頁瀏覽量

2019年3月19日 星期二

2018.6月APCS實作題 第二題(完全奇數)






Python Code:

import math as lp
n=int(input())
origin=n
old=[]#存n的舊各數字
new=[]#存n的舊各數字
def transtodigit(li):#將數字串列轉成十進位數
    num=0
    for i in li:
        num=num*10+i
    return num

def after(li,even):
    if even<len(li):
        li[even]+=1
    for i in range(even+1,len(li)):
        li[i]=1
    return transtodigit(li)
# 借二位以上就不用管它了,因為它不會是取完絕對值後最小
def before(li,even):
    if even<len(li):
        if li[even]==0:
            li[even]-=1
            li[even-1]-=1
            if li[even-1]<=0:
                li[even]=9
                li[even-1]=0
        elif li[even]!=0:
            li[even]-=1
    for i in range(even+1,len(li)):
        li[i]=9
    return transtodigit(li) 
       
q=lp.floor(lp.log10(n))+1 #取出n的位數
for i in range(q):
    ls=n%10
    old.append(ls)
    new.append(ls)
    n//=10
    
old.reverse()
new.reverse()
for i in range(len(old)):
    if (old[i]%2)==0:
        first_even=i #找出第一個出現偶數的位數
        break
    else:
        first_even=len(old)+1

ans=min(after(new,first_even)-origin,origin-before(old,first_even))
print(ans)







沒有留言:

張貼留言