数字黑洞 6174 (Kaprekar 常数)
任取一个四位数(各位不全相同),把各位数字从大到小和从小到大各排成一个数,相减,重复这个过程,最多 7 步就会掉进 6174,然后永远停在 6174。
"""数字黑洞 6174 —— Kaprekar 常数探索器。"""
def kaprekar_step(n: int) -> int:
digits = sorted(f"{n:04d}")
asc = int("".join(digits))
desc = int("".join(reversed(digits)))
return desc - asc
def kaprekar_route(n: int) -> list[int]:
route = [n]
seen = {n}
while True:
nxt = kaprekar_step(route[-1])
if nxt in seen: # 防全同数字的 0000 陷阱
break
route.append(nxt)
seen.add(nxt)
if nxt == 6174:
break
return route
if __name__ == "__main__":
print("例:3524 的坠落路线")
print(" ", " -> ".join(str(x) for x in kaprekar_route(3524)))下载源码: kaprekar.py