Python解决SEND MORE MONEY

           在Python入门经典中看到了一道SEND, MORE, MONEY的题,至于这个SEND, MORE,MONEY是谁提出来的,我在网上扫荡了很久,google,维基百科也转不开,有知道由来的博友,还望留言,互相学习。

           具体的算式如右下图:

Python解决SEND MORE MONEY_第1张图片

           英文含义 "多给点钱吧" 图中的字母都表示数字,字母不同表示数字不同。自己动手来计算的话,估计会花一点时间。但是最起码能知道的是,M是属于进位,M的值为1,这将对程序处理循环嵌套带来很大的方便,并大大降低时间复杂度(MORE的范围是1000-1999,而由于有进位SEND的范围是8000-9999)。

         这个题目给出两种解法

          1、手动,通过设未知数,列方程进行解决,这个网上有很多大神给出了解法,具体过程我没有去确认,不过结果是对的,我在这里只是给出链接。 http://blog.sina.com.cn/s/blog_4b3f4fca0100a3m5.html

          2、机动,通过python语言,借助电脑解决这个问题。这里贴一下代码,由于我写的程序复杂度比较大,大大影响执行效率,还望python高手能指点一二,来精简程序,降低一下复杂度。谢过了!

           代码:

 

# -*- coding: cp936 -*-
#PALE
def sepJudgeValue(_val,_list,_num):    #将数值分成元组并判断元组中是否有相同数字
    for x in range((_num-1),-1,-1):
        _list.append(_val / (10 ** x) % 10)
    for y in range(0,_num):
        for z in range(0,_num):
            if y == z:
                continue
            else:
                if _list[y] == _list[z]:
                    return False
    else:
        return True
 
def comValue(_sList,_mList):  #判断两元组之间的关系
    for x in range(0,4):
        for y in range(0,4):
            if x == 1 and y == 3:
                if _sList[1] !=_mList[3]:
                    return False
            else:
                if _sList[x] == _mList[y]:
                    return False
    else:
        return True

#主程序过程  
for _SEND in range(8000,10000):   #M为进位,显然可知M=1
    sendList = []
    if sepJudgeValue(_SEND,sendList,4):
        for _MORE in range(1000,2000):
            moreList = []
            if sepJudgeValue(_MORE,moreList,4):
                if(comValue(sendList,moreList)):
                   _MONEY = _SEND + _MORE
                   moneyList = []
                   _money = moreList[0]*(10**3) + moreList[1]*(10**2) + sendList[2]*10 + sendList[1]
                   if (_MONEY/10) == _money and sepJudgeValue(_MONEY,moneyList,5):
                       print "SEND:%d,MORE:%d,MONEY:%d" %(_SEND,_MORE,_MONEY)

结果:

由于程序时间复杂度比较高,再者我的电脑太渣,6秒左右才出现结果,好在结果正确。

Python解决SEND MORE MONEY_第2张图片

PALE

你可能感兴趣的:(Python修行)