【kickstart 2018 round A】 Even Digits Python
程序员文章站
2022-03-15 15:07:19
我写的复杂一点,思路找到一个比它小 中最大的符合条件的数/ 比它大最小的符合条件的数,看那个跟原值接近# -*- 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