基本概念
窮舉法(窮舉搜索法、枚舉法, Brute Force)是一種在有限的解空間(解空間至少在理論上是有限的)內按照一定的策略進行查找的思想。窮舉法的基本思想就是以下兩個步驟:
- 確定問題的解(狀態)的定義,解空間的範圍以及正確解的判定條件。
- 根據解空間的特點選擇搜索策略,一一檢驗解空間中的候選解是否正確,必要時可輔助一些剪枝法,排除一些明顯不可能是正確解的檢驗過程,提高窮舉的效率。
示例演示
我們以古堡算式爲例。福爾摩斯到某古堡探險,看到門上寫着一個奇怪的算式:ABCDE * ? = EDCBA。他對華生說:“ABCDE 應該代表不同的數字,問號也代表某個數字!”
華生:“我猜也是!”於是,兩人沉默了好久,還是沒有算出合適的結果來。請你利用計算機的優勢,找到破解的答案。把 ABCDE 所代表的數字寫出來。
#include <iostream>
int main()
{
int a, b, c, d, e, x;
for (a = 0; a <= 9; a++)
for (b = 0; b <= 9; b++)
for (c = 0; c <= 9; c++)
for (d = 0; d <= 9; d++)
for (e = 0; e <= 9; e++)
for (x = 0; x <= 9; x++)
if (a != b&&a != c&&a != d&&a != e&&b != c&&b != d&&b != e&&c != d&&c != e&&d != e)
if ((a * 10000 + b * 1000 + c * 100 + d * 10 + e)*x == e * 10000 + d * 1000 + c * 100 + b * 10 + a)
std::cout << a << " " << b << " " << c << " " << d << " " << e << " ";
system("pause");
return 0;
}