趣味算式
匪警请拨110,即使手机欠费也可拨通!
为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!
某批警察叔叔正在进行智力训练:
1 2 3 4 5 6 7 8 9 = 110;
请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。
请你利用计算机的优势,帮助警察叔叔快速找到所有答案。
每个答案占一行。形如:
12+34+56+7-8+9
123+4+5+67-89
…
已知的两个答案可以输出,但不计分。
各个答案的前后顺序不重要。
op=['' for i in range(9)]
a=[]
for i in range(9):
a.append(i+1)
def dfs(s,preadd,i):
global op
if i==9:
if s==110:
print(a[0],end='')
for j in range(1,9):
if op[j]!='':
print(op[j],end='')
print(a[j],end='')
print()
return
op[i]=''
s-=preadd
tmp=0
if preadd>0:
tmp=preadd*10+a[i]
if preadd<0:
tmp=preadd*10-a[i]
s+=tmp
dfs(s,tmp,i+1)
s-=tmp
s+=preadd
op[i]='+'
s+=a[i]
dfs(s,a[i],i+1)
s-=a[i]
op[i]='-'
s-=a[i]
dfs(s,-a[i],i+1)
s+=a[i]
dfs(a[0],a[0],1)