计算结果总是100的程序

来源:互联网 发布:javascript入门 pdf 编辑:程序博客网 时间:2024/05/19 13:17

编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。

运行环境: python 3.4.3

运行命令: python3 test.py


运行结果:

1 + 2 + 3 - 4 + 5 + 6 + 7 8 + 9 = 100
1 + 2 + 3 4 - 5 + 6 7 - 8 + 9 = 100
1 + 2 3 - 4 + 5 + 6 + 7 8 - 9 = 100
1 + 2 3 - 4 + 5 6 + 7 + 8 + 9 = 100
1 2 + 3 + 4 + 5 - 6 - 7 + 8 9 = 100
1 2 + 3 - 4 + 5 + 6 7 + 8 + 9 = 100
1 2 - 3 - 4 + 5 - 6 + 7 + 8 9 = 100
total : 6561---7


test.py


#! /usr/bin/python3# -*- coding:utf-8 -*-'''编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。test100.pypython '''import sysdef nullcheck(data):back=0;for i in range(len(data)):if i%2 == 0 :continueelse:if data[i] == ' ' and i-back == 2:return -1elif data[i]== ' ':back = ireturn 0def check100(data):value =0num = 0j = 0n = 0op = 0for i in range(len(data)):if data[i] == '+' or data[i] == '-' or data[i] == '=':if op == '+':#print("i=%d,j=%d"%(i,j))if i-j == 1 :#print("+{0}".format(data[j]))value = value + data[j]elif i-j > 1 and n > 0:num = 0for k in range(i-j):if data[k+j] != ' ':#print("i={0},j={1},k={2},data[]={3}".format(i,j,k,data[k+j]))num = (10**((i-j-k+1)//2 - 1) )*data[k+j] + num#print(" +{0}".format(num))value = value + int(num)elif op == '-':if i-j == 1:#print("-{0}".format(data[j]))value = value - data[j]elif i-j > 1 and n > 0:num = 0for k in range(i-j):#print("i={0},j={1},k={2},data[{3}]={4}".format(i,j,k,k+j,data[k+j]))if data[k+j] != ' ':num = (10**((i-j-k +1)/2 - 1) )*data[k+j] + num#print(" -{0}".format(num))value = value - int(num)elif op == 0:if i-j == 1:#print("#{0}".format(data[j]))value = value + data[j]elif i-j > 1 and n > 0:num = 0for k in range(i-j):#print("i={0},j={1},k={2},data[{3}]={4}".format(i,j,k,k+j,data[k+j]))if data[k+j] != ' ':num = (10**((i-j-k +1)/2 - 1) )*data[k+j] + num#print("#{0}".format(num))value = value + int(num)j = i+1n = 0op = 0if i%2 ==0:continueelse:if data[i] == '+':op = data[i]elif data[i] == '-':op = data[i]elif data[i] == ' ':n = n + 1if value == 100:#print("{0}={1:d}".format(data,value));return 100else:#print("{0}={1:d}".format(data,value));return valuedef DUMP_100(data):for i in range(len(data)):if(data[i]!=' '):print(data[i],end=' ')print("100")def test100():data=[1,2,3,4,5,6,7,8,9]op=['+','-',' ']temp=[]cnt = 0t = 0for i1 in range(len(op)):for i2 in range(len(op)):for i3 in range(len(op)):for i4 in range(len(op)):for i5 in range(len(op)):for i6 in range(len(op)):for i7 in range(len(op)):for i8 in range(len(op)):#print("1{0}2{1}3{2}4{3}5{4}6{5}7{6}8{7}9".format(op[i1],op[i2],op[i3],op[i4],op[i5],op[i6],op[i7],op[i8]))temp.clear()temp.append(data[0])temp.append(op[i1])temp.append(data[1])temp.append(op[i2])temp.append(data[2])temp.append(op[i3])temp.append(data[3])temp.append(op[i4])temp.append(data[4])temp.append(op[i5])temp.append(data[5])temp.append(op[i6])temp.append(data[6])temp.append(op[i7])temp.append(data[7])temp.append(op[i8])temp.append(data[8])temp.append("=")t = t + 1if nullcheck(temp) != 0:continueif check100(temp) != 100:continueDUMP_100(temp)cnt= cnt +1print("total : {0}---{1}".format(t,cnt));if __name__ == '__main__':if len(sys.argv) > 1:check100([1, '+', 2, '+', 3, ' ', 4, '-', 5, '+', 6, ' ', 7, '-', 8, ' ', 9,"="]);else:test100()


阅读全文
0 0