一、所謂列舉
1、列舉法的本質就是從所有候選答案中去搜尋正確的解。
它的核心思想就是列舉所有的可能
2、使用該演算法需要滿足兩個條件:
(1)可預先確定候選答案的數量
(2)候選答案的範圍在求解之前必須有乙個確定的集合
3、基本框架
二、基本思想
1、列舉演算法簡單粗暴,他暴力的列舉所有可能,盡可能地嘗試所有的方法。雖然列舉演算法非常暴力,而且速度可能很慢,但確實我們最應該優先考慮的!因為列舉法變成實現最簡單,並且得到的結果總是正確的。
2、在實際問題中, 有些變數的取值被限定在乙個有限的範圍內。例如,乙個星期內只有七天,一年只有十二個月, 乙個班每週有六門課程等等。如果把這些量說明為整型, 字元型或其它型別顯然是不妥當的。 為此,c語言提供了一種稱為「列舉」的型別。在「列舉」型別的定義中列舉出所有可能的取值, 被說明為該「列舉」型別的變數取值不能超過定義的範圍。應該說明的是,枚舉型別是一種基本資料型別,而不是一種構造型別, 因為它不能再分解為任何基本型別。
三、定義
在列舉值表中應羅列出所有可用值。這些值也稱為列舉元素enum 列舉名
; enum weekday //舉例
;
四、優缺點
優點:演算法簡單,在區域性地方使用列舉法,效果十分好
缺點:運算量過大,當問題的規模變大的時候,迴圈的階數越大,執行速度越慢
五、使用規定
1、列舉值是常量,不是變數。不能在程式中用賦值語句再對它賦值。例如對列舉weekday的元素再作以下賦值: sun=5; mon=2; sun=mon; 都是錯誤的。
2、列舉元素本身由系統定義了乙個表示序號的數值,從0 開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1, …,sat值為6。
3、列舉值也可以用來做判斷比較。如:if(mon>sun) …
4、列舉變數的值可以由程式設計師自己定。
如:enum weekday;
定義sun為7,mon為1,以後按順序加1,即tue=1,wed=3。
5、能把列舉值賦予列舉變數,不能把元素的數值直接賦予列舉變數。如: a=sum;b=mon; 是正確的。而: a=0;b=1; 是錯誤的。
如一定要把數值賦予列舉變數,則必須用強制型別轉換,如: a=(enum weekday)2;其意義是將順序號為2的列舉元素賦予列舉變數a,相當於: a=tue; 還應該說明的是列舉元素不是字元常量也不是字串常量, 使用時不要加單、雙引號。
六、列舉演算法例項
百錢買百雞
1、問題描述:
公雞每只5元,母雞每只3元,三隻小雞1元,用100元買100隻雞,問公雞、母雞、小雞各多少只?
2、演算法分析:
利用列舉法解決該問題,以三種雞的個數為列舉物件,分別設為g、m、x,用三種雞的總數 g+m+x=100,買雞錢的總數 g5+m3+x*1/3=100 作為判定條件,列舉各種雞的個數。
3、**
執行結果:#includeusing namespace std;
int main()
} return 0;
}

列舉 窮舉 演算法
列舉法的本質就是從候選答案中去搜尋正確的解,使用該演算法需要滿足兩個條件 例 填數字遊戲 abcde x e eeeeee 問a,b,c,d,e各為多少?如下 例 填運算子5 運算子1 5 運算子2 5 運算子3 5 運算子4 5 5 問運算子各位啥滿足等式,且該等式不能用括號。分析 由於算術表示式...
演算法之暴力列舉(窮舉)
列舉法的基本思想是根據題目的部分條件確定答案的大致範圍,並在次範圍內對所有可能的情況逐一驗證,直到全部情況驗證完畢。若某個情況驗證符合題目的全部條件,則為本問題的乙個解 若全部情況驗證後都不符合題目的全部條件,則本題無解。也稱為窮舉法。題目 某人有n袋金幣,其中第i袋內金幣的數量是ai。現在他決定選...
Num 2 列舉 窮舉 演算法
可預先確定候選答案的數量 候選答案的範圍在求解之前必須有乙個確定的集合。例項1 填數遊戲 演算法描述題 x 算 題題題題題題 include stdafx.h include int main getchar return 0 例項2 填運算子 5 5 5 5 5 5 由於算術表示式的特殊性,在程式...