穷举法(Exhaustive Attack method),又称为强力法(Brute-force method),它是一种最为直接,实现最为简单,同时又最为耗时的一种解决实际问题的算法思想。
基本概念
穷举法的基本思想是:在可能的解空间中穷举出每一种可能的解,并对每一个可能解进行判断,从中筛选出问题的答案。
使用穷举法解决实际问题,最关键的步骤是划定问题的解空间,并在该空间中一一枚举出每一个可能的解。
有两点必须注意,
一是解空间的划定必须保证在覆盖问题的全部解。如果解空间的集合用A表示,问题的解用a来表示,只有当a包含于A才能使用穷举法求解。
二是解空间集合及问题的解集一定是离散的集合,也就是集合中元素是可列的,有限的。
穷举法是牺牲时间还来了解的全面性保证,因此穷举法的优势在于确保得到了全部的解,而瓶颈在于它的效率十分低下。但是穷举法的思想简单,易实现,在解决一些规模不大的问题上,使用穷举法是十分有效的。
例题
寻找[1,100] 之间的素数
代码样式
#include<stdio.h>
int ispreme(int n)/*判断n是否为素数,如果是返回1,不是返回0*/
{
int i;
for (i = 2; i < n; i++)
{
if (n%i == 0)
return 0;
}
return 1;
}
void getptreme(int low, int high)/*寻找[low,high]之间的素数 */
{
int i;
for (i = low; i <= high; i++)
{
if (ispreme(i))
{
printf("%d\t", i);/*如果是素数,就打印出来*/
}
}
}
int main()
{
int low, high;
printf("please input the domain for searvching prime\n");
printf("the low\n");
scanf_s("%d", &low);
printf("the high\n");
scanf_s("%d", &high);
getptreme(low, high);
}