小红定义一个正整数是“双生数”,当且仅当该正整数的每个数位的相邻数位中,恰好有一个和该数位的数字相同。 现在小红拿到了一个正整数 ,她希望你求出不小于 的最小“双生数”。
区块链毕设网qklbishe.com为您提供问题的解答
小红定义一个正整数是“双生数”,当且仅当该正整数的每个数位的相邻数位中,恰好有一个和该数位的数字相同。
现在小红拿到了一个正整数
,她希望你求出不小于
的最小“双生数”。
#简洁明了
def _solve(ss):
"""处理问题逻辑"""
s = list(ss)
n = len(s)
q,r = divmod(n,2)
#需要判断奇数还是偶数
#1.奇数位不可能是双生数,要变成11,1100,110011的情况
if r:
return "".join( [ "00" if i%2 else "11" for i in range(q+1) ])
#2.偶数位的处理
else:
i=0
flag=False
while i<n:
if s[i]!=s[i+1]:
if s[i]>s[i+1]:
s[i+1]=s[i]
else:
s[i]=s[i+1]=f"{int(s[i])+1}"
if i<2 or s[i]!=s[i-1]:
break
if i>1 and s[i]==s[i-1]:
t = int(s[i])
if t<9:
s[i]=s[i+1]=str(t+1)
else:
flag = True #998899889999
while(i>=0 and s[i]==‘9’ or i>0 and s[i]>‘7’ and s[i-1]>‘8’):
i-=2
break
i+=2
s[i+2:] = [ "11" if i%2 else "00" for i in range(n-i-2>>1) ]
if flag:
ti = int(s[i])
if i<0:
s=["11"]+s
elif i>0:
tmp = set(‘123456789’)-set(map(str,range(ti)))-set(s[i-1])-set(s[i])
s[i]=s[i+1] = min(tmp)
else:
s[i]=s[i+1] = str(ti+1)
return "".join(s)
def solve(s):
"""调用处理逻辑func,输出返回结果"""
res = _solve(s)
print(res)
# INPUTS="1233"
INPUTS=input()
solve(INPUTS)
16:56
以上就是关于问题小红定义一个正整数是“双生数”,当且仅当该正整数的每个数位的相邻数位中,恰好有一个和该数位的数字相同。
现在小红拿到了一个正整数 ,她希望你求出不小于 的最小“双生数”。的答案
欢迎关注区块链毕设网-
web3一级市场套利打新赚钱空投教程
区块链NFT链游项目方科学家脚本开发培训