学习python,看到一个有趣的题目,就练习了一下

0到9的10个数,要求组成两个5位数a和b,构成a和b中的数字不重复,并且 a + 20085 = b

代码实现,随手写的不是很规范

n = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
k = 20085


def validate(num: int):
    total = num + k

    if total > 99999:
        return False

    s = list(str(total)+str(num))

    for i in range(0, 5):
        a = s[i]

        if s.count(a) > 1:
            return False

    return True


def cal(base: int, num_list: list, digit: int):

    for t in range(0, len(num_list)):
        result = base
        num_list_copy = num_list.copy()
        num = num_list_copy[t]

        if (num == 0 or num*math.pow(10, digit) + k > 99999) and digit == 4:
            continue

        num_list_copy.remove(num)

        result += num * int(math.pow(10, digit))

        if digit == 0:
            if validate(result):
                print(result + k, result)
        else:
            cal(result, num_list_copy, digit - 1)

cal(0, n, 4)

运行的结果是:

35067,14982
48036,27951
58026,37941
62058,41973
72048,51963
85017,64932

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值