设为首页 加入收藏

TOP

穷举(一):穷举法的基本思想(一)
2019-06-13 12:08:04 】 浏览:121
Tags:穷举 基本 思想

      穷举是用计算机求解问题最常用的方法之一,常用来解决那些通过公式推导、规则演绎的方法不能解决的问题。采用穷举法求解一个问题时,通常先建立一个数学模型,包括一组变量、以及这些变量需要满足的条件。问题求解的目标就是确定这些变量的值。根据问题的描述和相关的知识,能为这些变量分别确定一个大概的取值范围。在这个范围内对变量依次取值,判断所取的值是否满足数学模型中的条件,直到找到全部符合条件的值为止。

      穷举法(枚举法)的基本思想是:列举出所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的全部解答。

      它利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检查,从中找出符合要求的答案。

      用穷举算法解决问题,通常可以从两个方面进行分析。

      (1)问题所涉及的情况:问题所涉及的情况有哪些,情况的种数可不可以确定。把它描述出来。应用穷举时对问题所涉及的有限种情形必须一一列举,既不能重复,也不能遗漏。重复列举直接引发增解,影响解的准确性;而列举的遗漏可能导致问题解的遗漏。

      (2)答案需要满足的条件:分析出来的这些情况,需要满足什么条件,才成为问题的答案。把这些条件描述出来。

      只要把这两个方面分析好了,问题自然会迎刃而解。

      穷举通常应用循环结构来实现。在循环体中,根据所求解的具体条件,应用选择结构实施判断筛选,求得所要求的解。

      穷举法的程序框架一般为:

cnt=0;                                   // 解的个数初值为0

for(k=<区间下限>;k<=<区间上限>;k++)          // 根据指定范围实施穷举 

   if (<约束条件>)                         // 根据约束条件实施筛选 

   { 

      cout<<(<满足要求的解>);              // 输出满足要求的解 

      cnt++;                            // 统计解的个数 

   }

【例1】硬币方案

      有50枚硬币,可能包括4种类型:1元、5角、1角和5分。

      已知50枚硬币的总价值为20元,求各种硬币的数量。

      例如:2、34、6、8就是一种方案。而2、33、15、0是另一个可能的方案,显然方案不唯一。

      编写程序求出类似这样的不同的方案一共有多少种?

      (1)编程思路。

      直接对四种类型的硬币的个数进行穷举。其中,1元最多20枚、5角最多40枚、1角最多50枚、5分最多50枚。

      另外,如果以元为单位,则5角、1角、5分会化成浮点型数据,容易计算出错。可以将1元、5角、1角、5分变成100分、50分、10分和5分,从而全部采用整型数据处理。

      (2)源程序及运行结果。

#include <iostream>         

using namespace std;

int main()                           

{

    int a,b,c,d,cnt=0; 

    for(a=0;a<=20;a++) 

     for(b=0;b<=40;b++) 

      for(c=0;c<=50;c++) 

       for(d=0;d<=50;d++) 

          { 

          if(a*100+b*50+c*10+d*5==2000 && a+b+c+d==50) 

                { 

             cout<<a<<" , "<<b

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇穷举(三):建模分析后穷举 下一篇c++贪吃蛇

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目