《程序员的算法趣题》-(日)增井敏克 Python解题 -- (Q13)

博客介绍了《程序员的算法趣题》中的一道字母算式问题,即求解READ + WRITE + TALK = SKILL的不同整数解法。通过Python编程,得出了解法共有10种,并列举了具体的数字组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《程序员的算法趣题》-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言。有兴趣的同学,可以购书阅读~

在此更新个人编写的Python版,仅供学习使用。(运行环境:Python3.6)

Q13 有多少种满足字母算式的解法

    所谓字母算式,就是用字母表示的算式,规则是相同字母对应相同数字,不同字母对应不同数字,并且第一位字母的对应数字不能是 0。
    譬如给定算式 We×love = CodeIQ,则可以对应填上下面这些数字以使之成立。
W = 7, e = 4, l = 3, o = 8, v = 0, C = 2, d = 1, I = 9, Q = 6
    这样一来,我们就能得到 74×3804 = 281496 这样的等式。使前面那个字母算式成立的解法只有这一种。

问题
    求使下面这个字母算式成立的解法有多少种?
            READ + WRITE + TALK = SKILL

import re

def calc(calc_string):
    re_res = re.search('[A-Z]', calc_string)
    if re_res is None:
        if eval(calc_string):
            result_equation_list.append(calc_string.replace("==", '='))
        return
    else:
        _character = re_res.group()
        for value in char_dict[_character]:
            if value not in calc_string:
                replaced_string = calc_string.replace(_character, value)
                calc(replaced_string)

char_equation = 'READ+WRITE+TALK==SKILL'

cal_number = re.findall('[A-Z]+', char_equation)
char_dict = {}
changed_equation = char_equation
for word in cal_number:
    for index, character in enumerate(word):
        if index == 0:
            char_dict[character] = [str(i) for i in range(1, 10)]
        elif character not in char_dict:
            char_dict[character] = [str(i) for i in range(10)]

result_equation_list = []
calc(char_equation)
print("结果共有%s种,分别是:\n%s" % (len(result_equation_list), '\n'.join(result_equation_list)))

 运行结果:

                 结果共有10种,分别是:
                1632+41976+7380=50988
                2543+72065+6491=81099
                4905+24689+8017=37611
                5094+75310+1962=82366
                5096+35710+1982=42788
                5180+65921+2843=73944
                5270+85132+3764=94166
                7092+37510+1986=46588
                7092+47310+1986=56388
                9728+19467+6205=35400

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值