《程序员的算法趣题》-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言。有兴趣的同学,可以购书阅读~
在此更新个人编写的Python版,仅供学习使用。(运行环境:Python3.6)
Q02 数列的四则运算
在各个数字之间插入四则运算的运算符组成算式,然后计算算式的结果(某些数位之间可以没有运算符,但最少要插入 1 个运算符)
例) 1234 → 1+2×3 - 4=3
9876 → 9×87+6=789求位于 1000~9999,满足"将原数字各个数位上的数逆序排列得到的数", 并且算式的运算按照四则运算的顺序进行(先乘除,后加减)。
例) 100~999,符合条件的有以下几种情况。
351 → 3×51=153
621 → 6×21=126
886 → 8×86=688
operator_list = ["+", "-", "*", "/", ""]
for num in range(1000, 10000):
str_num = "{0}".format(num)
o1_list = operator_list[:]
o2_list = operator_list[:]
o3_list = operator_list[:]
if str_num[3] == '0':
o1_list.remove('')
if str_num[2] == '0':
o1_list.remove('/')
o2_list.remove('')
if str_num[1] == '0':
o2_list.remove('/')
o3_list.remove('')
if str_num[0] == '0':
o3_list.remove('/')
for o_1 in o1_list:
for o_2 in o2_list:
for o_3 in o3_list:
if o_1 == o_2 == o_3 == "":
continue
str_expression = str_num[3] + o_1 + str_num[2] + o_2 + str_num[1] + o_3 + str_num[0]
if eval(str_expression) == num:
print("{0}: {1}={2}".format(str_num[::-1], str_expression, num))
运行结果:
5931: 5*9*31=1395