Python-窮舉搜尋Google方程式
# coding=utf-8 # 問題:有一個由字元組成的等式。WWWDOT-GOOGLE=DOTCOM,每個字元代表一個0~9之間的數字, # WWWDOT、GOOGLE和DOTCOM都是合法的數字,不能以0開頭。 # 請找出一組字元和數字的對應關係,使它們互相替換,並且替換後的數字能夠滿足等式。 # 解答: # 777589-188103=589486 # 777589-188106=589483 import time # 0:用時127.50秒 # 1:用時51.31秒 USE_MY_ISVALUE = 1 # 字元,數字,是否是數字的最高位 char_item = [ ['W', -1, True], ['D', -1, True], ['O', -1, False], ['T', -1, False], ['G', -1, True], ['L', -1, False], ['E', -1, False], ['C', -1, False], ['M', -1, False], ] # value,used char_value = [ [0, False], [1, False], [2, False], [3, False], [4, False], [5, False], [6, False], [7, False], [8, False], [9, False] ] # 判斷數值是否有效 def IsValueVaild(ciItem, cvItem): if cvItem[0] == 0: if USE_MY_ISVALUE: if ciItem[0] == 'W'or ciItem[0] == 'D'or ciItem[0] == 'G': return False else: return not ciItem[2] return not cvItem[1] # 獲取對應的整數 def MakeIntegerValue(ci, string): strLen = string.__len__() res = 0 for i in range(0, strLen, 1): for item in ci: if string[i] == item[0]: res *= 10 res += item[1] return res # 判斷數值是否正確的回撥函式 def OnCharListReady(ci): minuend = "WWWDOT" subtrahead = "GOOGLE" diff = "DOTCOM" m = MakeIntegerValue(ci, minuend) s = MakeIntegerValue(ci, subtrahead) d = MakeIntegerValue(ci, diff) if (m-s) == d: print(str(m)+"-"+str(s)+"="+str(d)) def SearchResult(ci, cv, index, callback): max_char_count = ci.__len__() max_number_count = cv.__len__() if index == max_char_count: callback(ci) return for i in range(0, max_number_count, 1): if IsValueVaild(ci[index], cv[i]): cv[i][1] = True # 設定使用標誌 ci[index][1] = cv[i][0] SearchResult(ci, cv, index+1, callback) cv[i][1] = False # 清除使用標誌 if __name__ == '__main__': print("有一個由字元組成的等式。WWWDOT-GOOGLE=DOTCOM,每個字元代表一個0~9之間的數字," "WWWDOT、GOOGLE和DOTCOM都是合法的數字,不能以0開頭。" "請找出一組字元和數字的對應關係,使它們互相替換,並且替換後的數字能夠滿足等式。") print("解答:") start = time.clock() SearchResult(char_item, char_value, 0, OnCharListReady) end = time.clock() print("使用了: %f s" % (end - start))
最後列印的數值是,與書本提供的答案一樣。
相關推薦
Python-窮舉搜尋Google方程式
# coding=utf-8 # 問題:有一個由字元組成的等式。WWWDOT-GOOGLE=DOTCOM,每個字元代表一個0~9之間的數字, # WWWDOT、GOOGLE和DOTCOM都是合法的數字,不能以0開頭。 # 請找出一組字元和數字的對應關係,使它們互相替換,並且替換後的數字能夠滿足等式。 # 解答
窮舉搜尋:Google方程式
有一個由字元組成的方程式:WWWDOT-GOOGLE=DOTCOM 每一個字母代表一個不同的數字,不能以0開頭。 使用窮舉法就是對每個字母用0~9的數字嘗試10次,由於沒一個字母代表不同的數字,如果考慮0開頭的情況,這樣的組合有10*9*8*7*6*5*4*3*2*1=36
演算法樂趣之窮舉搜尋例項:Google方程式;
如題:有一個有字元組成的等式:WWWDOT-GOOGLE = DOTCOM,每個字元代表一個0-9之間的數字,WWWDOT、GOOGLE和DOTCOM都是合法的數字,不能以0開頭,請找出一組字元和數字的對應關係,使得它們互相轉換,並且替換後的數字都能滿足等式。 總共可能性:
窮舉搜尋:選擇物品的排列組合,每個物品都——可選、不選
注意:僅針對物品個數n很小試用,共有2^n種組合 另外還可以通過移位操作和位運算得到(目前我還不會,學會了再說) #include "pch.h" #include <iostream> int n = 3; int S[3] = { 0 }; void rec(int i)
窮舉搜尋:回溯與深搜
計算機常用演算法大致有兩大類,一類叫蠻力演算法,一類叫貪心演算法,前者常使用的手段就是搜尋,對全部解空間進行地毯式搜尋,直到找到指定解或最優解。 【建立解空間】 問題的解應該如何描述,如何建立?藉助圖論的思想,我們可以用圖來描述,圖的定義為G,由頂點集和邊集
窮舉搜尋法演算法講解
窮舉搜尋法是對可能是解的眾多候選解按某種順序進行逐一列舉和檢驗,並從眾找出那些符合要求的候選解作為問題的解。 【問題】 將A、B、C、D、E、F這六個變數排成如圖所示的三角形,這六個變數分別取[1,6]上的整數,且均不相同。求使三角形三條邊上的變數之和相等的全部解。如
python--窮舉指定長度的密碼
本程式可根據給定的字元字典,窮舉指定長度的所有字串: def get_pwd(str, num): if(num == 1): for x in str: yield x else:
nyoj 17 單調遞增最長子序列(dp---記憶化搜尋||窮舉|| nlogn演算法)
單調遞增最長子序列 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 求一個字串的最長遞增子序列的長度 如:dabdbf最長遞增子序列就是abdf,長度為4 輸入第一行一個整數0<n<20,表示有n個字串要處理 隨後的n行,每行有
【行易少兒程式設計】10.Python 小學線性方程題目的解答-兩種程式設計方法:窮舉法及方程法等的比較
下面這道題目,是小學很常見的數學題目,除了慣用的解題方法外,通過程式設計也可以解答。某班級的總人數為64人。女生比男生的一半多7人。請問:男女生分別是多少?第一種程式設計方法:窮舉法for intboys in range(0,65): for intgirls in
暴力窮舉zip壓縮文件的密碼
src extract pre code margin import auto right dir 生成密碼的方式類似與時鐘,末尾遍歷完了第k位所有的字符,就讓第k位的前一位到下一位字符,第k位回到第0個字符。 對python還不太熟悉,效率比較低,但是能破解簡單的
人生苦短之Python枚舉類型enum
12個 nbsp clas 變量 highlight 是什麽 說了 人生苦短 問題 枚舉類型enum是比較重要的一個數據類型,它是一種數據類型而不是數據結構,我們通常將一組常用的常數聲明成枚舉類型方便後續的使用。當一個變量有幾種可能的取值的時候,我們將它定義為枚
求立方根算法--個人對立方根算法的窮舉和優化
lose [] code 8.0 中心 port 我們 一次 分享 在hpe實訓中心學習,遇到了求立方根的題目,在此做一下算法筆記, 分析過程: 數n的立方根就是n=i*i**i;所以我們會優先想到一下方法. static double g32(double n)
Python 枚舉
沒有 cat range pes 枚舉類型 n) 2.3 value typeerror 1. 枚舉的定義 首先,定義枚舉要導入enum模塊。枚舉定義用class關鍵字,繼承Enum類。用於定義枚舉的class和定義類的class是有區別。 示例代碼: from enum
Python枚舉類
參考 imp for mem item 屬性 它的 back -m 本篇主要介紹Python中枚舉類的用法,更多內容請參考:Python學習指南 當我們需要定義常量時,一個辦法就是用大寫變量通過整數來定義,例如月份: JAN = 1 FEB = 2 MAR = 3 ··
常用算法-窮舉法
sdn 方法 多少 自身 clas 設置 HR AR 一種可能 窮舉法又稱為枚舉法,它是在計算機算法設計中用得最多的一種編程思想。它的實現方式是:在已知答案範圍的情況下,依次地枚舉該範圍內所有的取值,並對每個取值進行考查,確定是否滿足條件。經過循環遍歷之後,篩選出符合要求的
窮舉法判斷鍵入的數是不是素數
AI ber pri AR number clas AS flag stdio.h #include <stdio.h> int main(int argc, char *argv[]) { int num,i; bool flag = tr
Python-枚舉
course 枚舉類型 優勢 == 最重要的 目的 優秀 true 關系 枚舉其實本質上是一種映射,為了滿足對分類的可讀性,在數據庫中分類的存儲一般為數字編號,而直接使用數字編號在代碼中可閱讀性太差,然後就產生了枚舉類型 枚舉類沒有出現之前,則通過變量、字典和類的方
窮舉一個字串的子序列
import java.util.*; public class Zixulie { public static Set<List> set=new HashSet<List>();//用於儲存窮舉的結果 public static List temp=new
瞭解學習 Elasticsearch 及其與 Python 實現全文搜尋
Elasticsearch簡介 ElasticSearch是一個基於Lucene的搜尋伺服器.它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。設計
通過selenium,暴力窮舉身份證號登陸某網站
偶然發現小學女神在某大學讀研,想聯絡一波。十多年沒有聯絡,怎麼辦?發現研究生錄取查詢只用身份證號+姓名+驗證碼,身份證號學校在某些檔案公佈了14位,剩下四位要窮舉,身份證最後一位校驗位,倒數第二位性別,倒數第三第四位窮舉,算下來也就500種可能,可以接受;姓名當然知道;驗證碼,學校的驗證碼也是簡