C++基本算法思想之窮舉法
窮舉算法(Exhaustive Attack method)是最簡單的一種算法,其依賴于計算機的強大計算能力來窮盡每一種可能性,從而達到求解問題的目的。窮舉算法效率不高,但是適應于一些沒有規(guī)律可循的場合。
窮舉算法基本思想
窮舉算法的基本思想就是從所有可能的情況中搜索正確的答案,其執(zhí)行步驟如下:
(1)對于一種可能的情況,計算其結果。
(2)判斷結果是否符合要求,如果不滿足則執(zhí)行第(1)步來搜索下一個可能的情況;如果符合要求,則表示尋找到一個正確答案。
在使用窮舉法時,需要明確問題的答案的范圍,這樣才可以在指定的范圍內搜索答案。指定范圍之后,就可以使用循環(huán)語句和條件語句逐步驗證候選答案的正確性,從而得到需要的正確答案。
窮舉算法舉例
雞兔同籠問題最早記載于1500年前的《孫子兵法》,這是一個非常有名的問題。雞兔同籠的原文如下:
今有雞兔同籠,上有三十五頭,下有九十四足,問雞兔各幾只?
這個問題的大致意思是:在一個籠子里關著若干只雞和若干只兔,從上面數共有35個頭,從下面數共有94只腳。問籠中雞和兔的數量各是多少?
窮舉算法
這個問題需要計算雞的數量和兔的數量,我們通過分析可以知道雞的數量應該在1~35之間。這樣我們可以使用窮舉法來逐個判斷是否符合,從而搜索答案。
采用窮舉法求解雞兔同籠問題的程序示例代碼如下:
/*
輸入參數head是籠中頭的總數,foot是籠中腳的總數,chicken是雞的總數,rabbit是兔的總數
返回結果為0,表示沒有搜索到符合條件的結果;
返回結果為1,表示搜索到了符合條件的結果
*/
int qiongju(int head,int foot,int *chicken,int * rabbit)
{
int re,i,j;
re=0;
for(i=0;i<=head,i++) //進行循環(huán)
{
j=head-i;
if(i*2+j*4==foot) //進行判斷
{
re=1; //找到答案
*chicken=i;
*rabbit=j;
}
}
return re;
}
窮舉算法求解雞兔同籠問題
完整的瓊劇算法求解雞兔同籠問題的程序代碼如下:
#include<iostream>
using namespace std;
/*
輸入參數head是籠中頭的總數,foot是籠中腳的總數,chicken是雞的總數,rabbit是兔的總數
返回結果為0,表示沒有搜索到符合條件的結果;
返回結果為1,表示搜索到了符合條件的結果
*/
int qiongju(int head,int foot,int *chicken,int * rabbit)
{
int re,i,j;
re=0;
for(i=0;i<=head;i++) //進行循環(huán)
{
j=head-i;
if(i*2+j*4==foot) //進行判斷
{
re=1; //找到答案
*chicken=i;
*rabbit=j;
}
}
return re;
}
int main()
{
int chicken,rabbit,head,foot;
int re;
cout<<"窮舉法求解雞兔同籠問題:"<<endl;
cout<<"請輸入頭數:";
cin>>head;
cout<<"請輸入腳數:";
cin>>foot;
re=qiongju(head,foot,&chicken,&rabbit);
if(re==1)
{
cout<<"雞有"<<chicken<<"只,兔有"<<rabbit<<"只。"<<endl;
}
else
{
cout<<"無法求解!"<<endl;
}
return 0;
}
程序中,首先由用戶輸入頭的總數和腳的總數,然后調用窮舉法求解雞兔同籠問題的函數,最后輸出結果。
執(zhí)行該程序,按照題目的要求輸入數據,輸出結果。
您可能感興趣的文章
- 04-02c語言沒有round函數 round c語言
- 01-10深入理解C++中常見的關鍵字含義
- 01-10使用C++實現全排列算法的方法詳解
- 01-10深入第K大數問題以及算法概要的詳解
- 01-10c++中inline的用法分析
- 01-10深入N皇后問題的兩個最高效算法的詳解
- 01-10用C++實現DBSCAN聚類算法
- 01-10深入全排列算法及其實現方法
- 01-10全排列算法的非遞歸實現與遞歸實現的方法(C++)
- 01-10C++大數模板(推薦)


閱讀排行
本欄相關
- 04-02c語言函數調用后清空內存 c語言調用
- 04-02func函數+在C語言 func函數在c語言中
- 04-02c語言的正則匹配函數 c語言正則表達
- 04-02c語言用函數寫分段 用c語言表示分段
- 04-02c語言中對數函數的表達式 c語言中對
- 04-02c語言編寫函數冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數 round c語言
- 04-02c語言分段函數怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數 c語言中怎
- 04-02c語言調用函數求fibo C語言調用函數求
隨機閱讀
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢)副欄目數量限制代碼修改
- 01-11ajax實現頁面的局部加載
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10C#中split用法實例總結
- 01-10使用C語言求解撲克牌的順子及n個骰子