列舉 窮舉 演算法

2021-10-10 18:19:53 字數 1823 閱讀 5790

列舉法的本質就是從候選答案中去搜尋正確的解,

使用該演算法需要滿足兩個條件:

例: 填數字遊戲

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 由於算術表示式的特殊性,在程式...