題面
一個任意的正整數n,求出比n大並且是n的倍數的最小二段數
二段數是這樣的正整數:恰好包含兩種不同的十進位制數字s和t,s不是0,並且s的所有出現均排列在所有的t的前面
例如,44444411是二段數(s是4,t是1),41、10000000和5555556也是。
但4444114和44444都不是二段數。
分析
- 正則判斷二段數
- 倍數查詢最小跳出迴圈
程式碼
import re
# 判斷二段數
def Dis(s):
if s[0] == s[-1]:
return False
p = r'^([123456789])\1*(\d)\2*$'
return False if re.match(p, s, flags=0) is None else True
# 找出最小二段敉
def find(n):
i = 1
while True:
bs = n*i
bs = 10 if bs < 10 else bs
if Dis(str(bs)):
return (n, bs)
i += 1
arr = []
while True:
n = int(input())
if n == 0:
break
arr.append(n)
for i in arr:
print("%d: %d" % find(i))
輸出
(base) D:\code-base\python\test>python -u "d:\code-base\python\test\bin2.py"
1
2019
0
1: 10
2019: 9999999993
本作品採用《CC 協議》,轉載必須註明作者和本文連結