【kickstart 2018 round A】 Even Digits Python

我写的复杂一点,思路找到一个比它小 中最大的符合条件的数/ 比它大最小的符合条件的数,看那个跟原值接近

# -*- coding:utf-8 -*-
t=input("")
t=int(t)
a=[]
def bignum(num):
    length=len(num)
    flag=0
    for i in range(length):
        if(num[i]!=0 and num[i]!=2 and num[i]!=4 and num[i]!=6 and num[i]!=8):
            if(flag):
                num[i]=8
            else:
                flag=1
                num[i]=num[i]-1
        else:
            if(flag):
                num[i]=8

    return num
def smallnum(num):
    length=len(num)
    flag=0
    jw=0
    for i in range(length):
        if(num[i]!=0 and num[i]!=2 and num[i]!=4 and num[i]!=6 and num[i]!=8):
            if(flag):
                num[i]=0
            else:
                flag=1
                if(num[i]==9):
                    num[i]=0
                    j=i
                    j=j-1
                    if(j==-1):
                        jw=2
                    
                    else:
                        f=1
                        while(f and j>=0):
                            num[j]=num[j]+1
                            if(num[j]==9):
                                f=1
                                num[j]=0
                            else:
                                f=0
                                num[j]=num[j]+1
                            j=j-1
                        if(j<0 and f):
                            jw=2
                        

                else:
                    num[i]=num[i]+1
        else:
            if(flag):
                num[i]=0
    if(jw==2):
        num.insert(0,2)
    return num

for ca in range(1,t+1):
    a=[]
    t=t-1;
    num=input()
    num=int(num)
    temp=num
    while(num):
        a.insert(0,num%10)
        num=num/10
    t2=a[:]
    bn=bignum(t2)
    
    t2=a[:]
    sn=smallnum(t2)
    m1=0
    for i in bn:
        m1=m1*10+i
    m2=0
    for i in sn:
        m2=m2*10+i
    ans=min(temp-m1,m2-temp)
    print("Case #%d: %d"%(ca,ans))
    # print("Case #:%d"%bn)

看了别人写的,比我写的简单  https://blog.csdn.net/sinat_32682001/article/details/106305486

思路就是遇到9时,答案只会在比它小的那一侧,因为遇到9 比它大的话,会进位,会破坏掉前一个偶数,那么差值就会变得更大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值