格兰蒂亚秘闻吧 关注:4,975贴子:27,823
  • 1回复贴,共1

程序暴力破解沙漠关迷题

只看楼主收藏回复

之前寒假打这个迷题的时候就在想是不是把答案遍历出来
后来上贴吧确实看到有这样的网站。
最近刚学python,抱着练手的目的就把别人造过的车轮子又造了一遍。
代码会在下面放出来,如果有dalao闲着可以帮我精简精简嘛
使用方法跟那个网站一样了,一行输入运算符号,一行数字,一行目标数字。
不过我这个不能处理两位数的数字,不知道这个迷题有没有两位数的情况







IP属地:北京来自Android客户端1楼2019-02-20 17:44回复
    代码如下
    import copy
    symbol=str(input("运算符号:"))
    number=str(input("数字"))
    target=int(input("目标数字"))
    if len(symbol)!=len(number)-1:
    print ("无解")
    else:
    l_n,l_s,l_n_1,l_s_1,suc,l1,l2=[],[],[],[],0,[],[]
    '''
    def list(a,b,c):
    for i in range(0, len(a)):
    a[i] = b.count(c[i])
    list(l_s,symbol,l_s_1)
    list(l_n,number,l_n_1)
    '''
    #获取运算符号与数字列表
    for i in range(0,len(symbol)):
    l_s.append(symbol[i])
    for i in range(0,len(number)):
    l_n.append(int(number[i]))
    #定义计算方式
    def cal(sym,a):
    global temp
    if sym in "+":
    temp+=a
    if sym in "-":
    temp-=a
    if sym in "*":
    temp*=a
    if sym in "/":
    temp/=a
    #获取运算符号与数字全排列列表
    def listing(n,a,b,m):
    if a>=b:
    m.append(copy.deepcopy(n))
    else:
    for i in range(a,b):
    n[a],n[i]=n[i],n[a]
    listing(n,a+1,b,m)
    n[a],n[i]=n[i],n[a]
    listing(l_s,0,len(l_s),l1)
    listing(l_n,0,len(l_n),l2)
    #去重
    for i in range(0,len(l1)):
    if l1[i] not in l_s_1:
    l_s_1.append(l1[i])
    for i in range(0,len(l2)):
    if l2[i] not in l_n_1:
    l_n_1.append(l2[i])
    #遍历
    for i in range(0,len(l_s_1)):
    for j in range(0,len(l_n_1)):
    temp=l_n_1[j][0]
    for k in range(0,len(l_s)):
    cal(l_s_1[i][k],l_n_1[j][k+1])
    if temp==target:
    for k in range(0,len(l_s)):
    print(l_n_1[j][k],l_s_1[i][k],end="")
    print(l_n_1[j][-1],"=",target)
    suc+=1
    if suc==0:
    print("无解")
    如果要用的话,请放在python3.0以上食用


    IP属地:北京来自Android客户端2楼2019-02-20 17:45
    回复