啊哈!演算法 之列舉

2021-09-25 07:20:51 字數 944 閱讀 2340

for(i = 1;i<=9;i++)

}

這就是採用列舉的方法,把所有的可能性都進行了嘗試。

對於形如這樣的火柴棍,

如何在全部使用給定的火柴(m<=24)後拼出a+b =c的等式呢?

1. 等式中存在固定不變的地方, 就是加號與等號,他們一共佔4根。

2. a + a = c這種,只能存在一次。

3. a + b = c與b + a = c視為不同的兩組。

4. 確定範圍。列舉也是需要在一定的範圍內進行的。1這個數字需要的火柴最少,是2根,對於任意乙個數,最多是(24-4)/ 2

最多拼10個1,所以任意乙個數不會超過11111

5. 如果a、b、c一共使用的是m-4根,那麼就是一組解。

但是,我們發現,對a,b,c三個數進行列舉,複雜度是11112*11112*11112,大約需要1000多秒。

但如果只需要列舉a和b,直接通過計算得出c,複雜度將會變成11112*11112,可以降低到1秒以內。

1. 記錄每個數字需要的火柴數

int f[10] = ;
2. 獲取x數值需要的火柴數

int num = 0;    //所需要的火柴數

while(x/10 != 0)

num += f[x];

return num;

3. 開始列舉

int main()}}

printf("一共可以拼出%d個不同的等式",sum);

return 0;

}

啊哈演算法之暴力列舉

列舉演算法又叫做窮舉演算法。將數字1 9分別填入9個 中,每個數字只能使用一次使得等式成立。暴力窮舉法 include include int main printf total d n total 2 system pause return 0 標記法 用乙個book陣列來解決互不相等的問題。in...

啊哈!演算法 列舉之炸彈人

炸彈人 現有關卡 遊戲者只有一枚炸彈,且炸彈可以殺死殺傷範圍內所有敵人。請問炸彈放在哪個位置,可以消滅最多的敵人。思路 首先將地圖模型化。牆用 表示 敵人用g表示 空地用.表示。炸彈只能放在空地上。如 13行13列 gg.ggg ggg.g g g g g g g g gg.ggg.gg g g g...

啊哈演算法之BFS

1 include include struct node int main 初始化地圖 int book 50 50 初始化記錄陣列 int next 4 2 int i,j,k 迴圈中用到的迴圈變數 int startx,starty 起點座標 int p,q 終點座標 int flag 0 表...