1. 程式人生 > >演算法之暴力破解法(窮舉法)一

演算法之暴力破解法(窮舉法)一

一,什麼是暴力破解法?

  暴力破解法,就是把所有條件,相關情況統統考慮進去,讓計算機進行檢索,指導得出與之所有條件符合的結果

  (但是,暴力破解法對計算機資源耗費嚴重,如果條件太複雜,運算速度緩慢,為了解決這一問題,我們可以事先把與之不相關的條件進行限制,減少計算機的運算量

二,暴力破解法應用

       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個人,問:這支部隊有多少人?

    【理解】

    可以使用暴力破解法的方式,列舉所有情況,顯然人數就是我們列舉的情況;

     【程式碼如下】

public 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);
	    		 
	    	 }
	    	 
	     }
		
	}
}
 【答案】51
331
611
891

1171

【總結】

暴力破解法:僅僅就是對所有可能的情況逐一的去列舉,並且用條件進行篩選,把滿足條件的列舉出來,就可以了。