Kali吧線上交流羣羣管理員選拔賽編程題

Kali吧線上交流羣羣管理員選拔賽編程題

題目如下圖:

這裏寫圖片描述
看完題,作爲一個曾經的acmer,必然是流着遇題先暴力的血,說了是個四位數那麼我們逐個枚舉判斷就好了,代碼如下:

# encoding:utf-8
'''
6403 0A2B
3659 0A2B
0197 0A1B
8964 0A1B
5830 2A2B
1386 0A2B

3729 2A0B
1697 0A2B
7812 0A2B
4129 2A0B
5268 0A1B
2931 0A3B

3419 0A2B
8345 0A2B
5974 1A1B
6723 0A1B
7081 0A1B
9837 0A2B
'''
get_input=[]
get_right_all=[]
get_right_part=[]
def getinput():
    for i in xrange(6):
        tmp=raw_input("")
        get_input.append(tmp.split(" ")[0])
        get_right_all.append(tmp.split(" ")[1][0])
        get_right_part.append(tmp.split(" ")[1][2])

def cmp(str1,str2,num,flag):
    tmp=0
    if flag==0: #數值及位置相同
        for i in xrange(4):
            if str1[i]==str2[i]:
                tmp+=1
    if flag==1: #數值相同位置不同
        for i in xrange(4):
            for j in xrange(4):
                if str1[i]==str2[j] and i!=j:
                    tmp+=1
    if tmp==num:
        return True
    else:
        return False

if __name__ == '__main__':
    getinput();
    for i in xrange(1000,10000):
        string=str(i)
        flag=0
        for j in xrange(6):
            if cmp(string,get_input[j],int(get_right_all[j]),0) and cmp(string,get_input[j],int(get_right_part[j]),1):
                continue
            else:
                flag=1;
        if flag==0:
            print "Answer is "+str(i)+" !"
            break
        if flag==1 and i==9999:
            print "No answer!"

這裏鏈接有一些其他思路的代碼,學習下,確實佩服有幾位的邏輯,同是也學習了下別人的代碼風格,有興趣筒子的可以看下 http://www.jianshu.com/p/3b33f1d56083

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章