欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【kickstart 2018 round A】 Even Digits Python

程序员文章站 2022-07-02 09:13:47
我写的复杂一点,思路找到一个比它小 中最大的符合条件的数/ 比它大最小的符合条件的数,看那个跟原值接近# -*- 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)...

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

# -*- 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 比它大的话,会进位,会破坏掉前一个偶数,那么差值就会变得更大

本文地址:https://blog.csdn.net/u013628265/article/details/109641867

相关标签: kickstart