程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 把數字串變成2012瑪雅密碼

把數字串變成2012瑪雅密碼

編輯:C++入門知識

把數字串變成2012瑪雅密碼


問題:

瑪雅密碼是一串由0、1、2組成的密碼,這串數字中如果包含2012,就可以解開末日的大門。給定一串由0、1、2組成的字符串,只有相鄰的數字可以交換,求通過最少多少次變換可以得到瑪雅密碼,並給出這串密碼。

思路:

經過很久很久的嘗試,放棄了一次性拼湊2012的想法,改用預處理得到所有數字范圍中符合瑪雅密碼的部分,再遞歸遍歷給定的數字串,得到該串所有可能的變換,並比較每個變換的結果需要的步數。


import sys  
def find_all_transfers(str):  
    result={}  
    if len(str) == 0:  
        result[str] = 0  
    for index in range(0, len(str)):  
        first=str[index]  
        next_str=str[0:index] + str[index+1:len(str)]  
        next_result=find_all_transfers(next_str)  
        #print("next_result is: ")  
        #print(next_result)  
        for key in next_result:  
            steps = index+next_result[key]  
            if first+key not in result or steps < result[first+key]:  
                result[first+key] = steps  
    return result  
  
 def build_map():  
     map={}  
     for i in range(0, 3**13-1):  
         if check_2012(i):  
             map[i] = True  
     return map  
  
 def check_2012(number):  
     while number >= 59:  
         if number%81 == 59:  
             return True  
         number /= 3  
     return False  
  
 def from_3_to_10(str):  
     count=0  
     iterator = range(0, len(str))  
     for i in iterator:  
         count+=int(str[-i-1])*(3**i)  
     return count  
  
 map = build_map()  
 #print(map)  
 str=raw_input("input string from 0,1,2: ")  
 print("str is %s"%str)  
 result = find_all_transfers(str)  
 #print(result)  
 min = sys.maxint  
 min_key = ""  
 for key in result:  
     number = from_3_to_10(key)  
     #print("value of %s is %d"%(key, number))  
     if check_2012(number):  
         #print("min is %d"%min)  
         #print("result[key] is %d"%result[key])  
         if min > result[key]:  
             min = result[key]  
             min_key = key  
 print("min steps is %d, final string is %s"%(int(min), min_key))  


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved