列舉法的本質就是從候選答案中去搜尋正確的解,
使用該演算法需要滿足兩個條件:
例: 填數字遊戲
abcde
x e
————
eeeeee
問a,b,c,d,e各為多少?
**如下:
例: 填運算子5 [運算子1] 5 [運算子2] 5 [運算子3] 5 [運算子4] 5 = 5
問運算子各位啥滿足等式,且該等式不能用括號。
分析
由於算術表示式的特殊性,在程式設計求解這個演算法時,需要注意已下幾點:
當填入除號時,要求右側的數不能為0.
乘除的運算級別比加減高。
那麼?問題是如何先算乘除再算加減呢?
假設5的最前面還有乙個0
即 0+5 5 5 5 5
用乙個變數left來儲存操作符左邊的和
用乙個變數right來儲存操作出右變的和。
所以 left初始是=0 right初始是=5
我們知道計算式是從左到右依次累加
再用乙個sign變數來判斷累加運算時的符號
分析一下
0+5*5-5*5+5=5
第乙個操作符*號時:left不變 right=25
第二個操作符-號時:left=left+right=25,right=5,累加的符號是負號
第三個操作符*號時:right=25 left不變
第四個操作符+號時: left=left-rght=25-25=0 right=5 累加的符號是正號
最後 left=left+sign*right 即左邊加右邊累加。
此時的右邊的數已經沒有了left就是最終的結果
判斷left等不等於結果5就可以了
綜上分析:
先以第乙個虛擬的+號為分隔符
left等於加號左邊的數=0
right等於加號右邊的數=5*5=25
再以-號為分隔符
left等於減號左邊的數的和=25
right等於減號右邊的數=5*5=25
再以+號為分隔符
left等於加號左邊的數的和=25-25=0
right等於加號右邊的數=5
這時沒有操作符了left+right就是最終等式的結果
**如下:
#includeint main()
;//運算子
printf("請輸入5個數: ");
for(j=1;j<=5;j++)
printf("請輸入結果:");
scanf("%d",&result);
//迴圈4種運算子,1表示+,2表示-,3表示*,4表示'\'
for(i[1]=1;i[1]<=4;i[1]++)//第乙個操作符
列舉(窮舉)演算法
一 所謂列舉 1 列舉法的本質就是從所有候選答案中去搜尋正確的解。它的核心思想就是列舉所有的可能 2 使用該演算法需要滿足兩個條件 1 可預先確定候選答案的數量 2 候選答案的範圍在求解之前必須有乙個確定的集合 3 基本框架 二 基本思想 1 列舉演算法簡單粗暴,他暴力的列舉所有可能,盡可能地嘗試所...
演算法之暴力列舉(窮舉)
列舉法的基本思想是根據題目的部分條件確定答案的大致範圍,並在次範圍內對所有可能的情況逐一驗證,直到全部情況驗證完畢。若某個情況驗證符合題目的全部條件,則為本問題的乙個解 若全部情況驗證後都不符合題目的全部條件,則本題無解。也稱為窮舉法。題目 某人有n袋金幣,其中第i袋內金幣的數量是ai。現在他決定選...
Num 2 列舉 窮舉 演算法
可預先確定候選答案的數量 候選答案的範圍在求解之前必須有乙個確定的集合。例項1 填數遊戲 演算法描述題 x 算 題題題題題題 include stdafx.h include int main getchar return 0 例項2 填運算子 5 5 5 5 5 5 由於算術表示式的特殊性,在程式...