演算法之暴力破解法(窮舉法)一
阿新 • • 發佈:2019-01-10
一,什麼是暴力破解法?
暴力破解法,就是把所有條件,相關情況統統考慮進去,讓計算機進行檢索,指導得出與之所有條件符合的結果
(但是,暴力破解法對計算機資源耗費嚴重,如果條件太複雜,運算速度緩慢,為了解決這一問題,我們可以事先把與之不相關的條件進行限制,減少計算機的運算量)
二,暴力破解法應用
1.雞兔同籠
問題:有雞兔共50頭,共有腳120只。 問 :雞兔分別的數量?
【理解】
雞的頭和兔子的頭數想加為50個,情況數量並不是很多,最多50個最少0個,是有限的,這個問題就可以使用暴力破解的方法來解決。
【程式碼如下】
public class OneDay { public static void main(String[] args) { //x為雞的數目,最小是0,最大為50,在一個迴圈中一個一個的測試,看哪一個條件能夠滿足題目要求 for(int x=0;x<=50;x++){ int y=50-x; if(x*2+y*4==120) { System.out.println("x="+x+"y="+y); } } } }
【答案】
x=40 y=10
2.韓信點兵
韓信知道部隊人數大約1000人左右,具體數字不詳,5人一組剩餘1人,7個人一組還剩兩個人,8個人一組還剩3個人,問:這支部隊有多少人?
【理解】
可以使用暴力破解法的方式,列舉所有情況,顯然人數就是我們列舉的情況;
【程式碼如下】
【答案】51public class OneDay { public static void main(String[] args) { for(int i=0;i<=2000;i++) { if(i%5==1 && i%7==2 && i%8==3) { System.out.println(i); } } } }
331
611
891
1171
【總結】
暴力破解法:僅僅就是對所有可能的情況逐一的去列舉,並且用條件進行篩選,把滿足條件的列舉出來,就可以了。