Python实现数学黑洞6174猜想

Python实现数学黑洞6174猜想

[写个小demo]ovo~偶然想起数学黑洞的问题,想要验证一下猜想。
简单聊聊6174猜想:
6174猜想,1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数rev(m),得出数k1=m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去,卡普耶卡发现,无论k0是多大的四位数, 只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174.

"""狐狸为啥不吃草"""
from itertools import combinations


def menu_data(nums):
    # 用字符串的下标操作取出各个位数
    a = nums[0]  # 千
    b = nums[1]  # 百
    c = nums[2]  # 十
    d = nums[3]  # 个
    if not a == b == c == d:
        list1 = [a, b, c, d]  # 去除list1中各个位数都相同的数
        for i in combinations(list1, 4):
            i = list(i)
            print(i, end='')
        sums = 0
        while True:
            small = int(''.join(sorted(i)))
            # print(f'第{sums+1}次,较小数{small}')
            big = int(''.join(sorted(i, reverse=True)))
            # print(f'第{sums+1}次,较大数{big}')
            difference = big - small
            # print(f'第{sums+1}次,两数差{difference}')
            sums += 1
            if difference == 6174:
                print(f'结果为:6174,一共用了:{sums}')
                break
            else:
                i = list(str(difference))
                # print(i)
                if len(i) < 4:
                    i.append('0')
                # print(i)

def main():
    for i in range(1000, 10000):
        nums = str(i)
        menu_data(nums)


main()

以下是程序运行结果的部分截图:
6174结果的部分展示
果然喵的没有超过7次的,是不是贼神奇~~

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值