獲取最小二段數

pardon110發表於2020-04-29

題面

一個任意的正整數n,求出比n大並且是n的倍數的最小二段數
二段數是這樣的正整數:恰好包含兩種不同的十進位制數字s和t,s不是0,並且s的所有出現均排列在所有的t的前面

例如,44444411是二段數(s是4,t是1),41、10000000和5555556也是。
但4444114和44444都不是二段數。

分析

  1. 正則判斷二段數
  2. 倍數查詢最小跳出迴圈

程式碼

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 協議》,轉載必須註明作者和本文連結

相關文章