数据结构与算法(3)蛮力法

蛮力法(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=02.将A从19依次试探
	2.1 将B从29依次试探
	2.1.1 将C从09依次试探
	2.1.1.1 temp1←计算ABB的值;
	2.1.1.2 temp2←计算ACBC的值;
	2.1.1.3 如果temp1*B等于temp2,则输出A、B和C的值;结果标志flag=13.如果结果标志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;
}

运行结果如下:
在这里插入图片描述

发布了349 篇原创文章 · 获赞 74 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/Ciellee/article/details/105118330
今日推荐