蛮力法(bruteforcemethod,也称穷举法)通常采用一定的策略依次处理待求解问题的所有数据,
从而找出问题的解,是一种简单直接地解决问题的方法。
例如,对于给定的整数a和非负整数n,计算an的值,最直接的想法就是把1和a相乘n次。
蛮力法常常直接基于问题的描述,所以是最容易应用的方法。
但是,用蛮力法设计的算法其时间性能往往也是最低的。
因此,蛮力法通常用来解决非常基本的问题。
在本书中,有关线性表的基本操作、顺序查找算法、模式匹配BF算法、起泡排序、简单选择排序等算法都是蛮力法的应用实例。
算法设计实例——数字谜
【想法】 将A、B、C依次试探每一个可能解,约束条件是满足等式关系(ABB)×B=ACBC。
【算法】 注意到,A的穷举范围是1~9,B的穷举范围是2~9(因为乘法结果有进位,则B至少是2),C的穷举范围是0~9,
算法用伪代码描述如下:
算法:数字谜
输入:无
输出:三个整数A、B和C
1.初始化结果标志flag=0;
2.将A从1到9依次试探
2.1 将B从2到9依次试探
2.1.1 将C从0到9依次试探
2.1.1.1 temp1←计算ABB的值;
2.1.1.2 temp2←计算ACBC的值;
2.1.1.3 如果temp1*B等于temp2,则输出A、B和C的值;结果标志flag=1;
3.如果结果标志flag等于0,则输出“无解”;
主程序如下:
#include <stdio.h>
int main()
{
int A, B, C, temp1, temp2, flag =0;
for( A = 1; A<=9 ; A++){
for(B = 2; B<=9; B++){
for(C = 0; C<=9 ; C++ )
{
temp1 = A *100 + B*10 + B; // ABB
temp2 = A*1000 + C*100 + B*10 +C // ACBC
if(temp1 * B == temp2) // ABB * B = ACBC
{
printf(" A=%d, B=%d, C=%d \n",A, B, C);
printf(" %d x %d = %d \n", temp1, B, temp2);
flag = 1;
}
}
}
}
if(flag == 0)
printf("无解\n");
return 0;
}
运行结果如下: