龙空技术网

C++编程之算法-枚举算法:算法思想

王老师青少年编程课堂 157

前言:

眼前姐妹们对“枚举算法的算法结构是”大致比较关心,我们都想要分析一些“枚举算法的算法结构是”的相关资讯。那么小编同时在网上汇集了一些关于“枚举算法的算法结构是””的相关资讯,希望看官们能喜欢,小伙伴们快快来学习一下吧!

C++编程算法:枚举算法。

hello各位同学,欢迎来到王老师编程课堂。今天来研究一个C++中的算法,算法的名字叫枚举算法。可能有很多同学也听说过,说老师,我在学C++的时候过程中不管是听您说还是听其他老师说或者听我的同学说,C++里面有一种算法叫暴力算法。

到底什么叫暴力算法?其实枚举算法就是一种经典的暴力算法,它的特征有这么一个特征:便利所有候选答案已找到正确的解答这样一种策略。俗称的暴力其实就这样一个意思,比如一个答案一个答案试,最终把正确的答案试出来了,这种方法就叫做暴力算法。

其实关于枚举算法还有很多别名,比如除了枚举算法之外还有一个别名叫穷举算法。穷举和暴力是不是也是对等的?穷举一直举一直举一直举,直到穷尽为止,这叫穷举算法。枚举就是一个一个试,一个一个试,直到所有的都试完,这叫枚举算法。

其实枚举算法或者穷举算法本身就是一种暴力的特征,解决问题的方法,所以起个名字就叫枚举算法。

关于枚举算法的特点,为什么计算机能够用这种枚举算法?其实生活中一般不建议用暴力,为什么?打个比方,有一千把钥匙,有一把锁,为了试出来到底哪把钥匙能开这把锁,如果要有一把一把的去试,会发现一千把就要每一把钥匙都得试。

假设钥匙数量再多一些,比如一万把,一千万,会发现用这种算法的特点是比较繁琐,可能用的时间会比较长,当然这是生活中的暴力。但是对于计算机来说,默认计算机有这么一个特点:计算速度快,而且精确度高。所以其实一秒钟想让它运行个十的八次方,简单不简单?还是非常非常简单的,一秒钟就能搞定十的八次方这样一个特征。

当然如果计算机性能再好一些,像国家的超级计算机,每秒钟的运营速度是相同的,当相当快的。

所以当计算机使用了媒体方法的时候会发现大部分情况下速度其实是相当快的,而且解决问题的成效也是立竿见影,因为最终一定能试出来最终答案。原因就是因为一个不漏的在进行检验,从中找出符合要求的答案。

当然一般情况下在写枚举算法的时候肯定要用循环,这样就可以让代码非常的简洁,而且利用循环的一些特征可以让它依次递增的方式去便利所有可能性。这个就是对媒体算法做了一个概念性的解释,大概做了一个了解。

如果回头非要有人问你枚举到底是一种什么算法,有几个关键词要说出来。

·第一个是一种暴力算法,得知道。

·第二个方法的特征叫穷举,就是所有的答案都要举,直到穷尽为止。

·第三个关键词就是便利,一般情况会用循环的方式便利所有可能性,最终找到一个正确答案。

了解了算法之后,算法枚举法的过程一般就分为两步了。

·第一步要确定枚举的对象,也说要枚举谁,没举的对象还要限定一个范围。一般情况下范围要通过各种条件去限定,这样有了媒体的对象加媒体的范围之后,接下来就是一个一个去判定到底符不符合要检测的解,其实就是判定条件。

所以枚举法的过程就是两步。

·第一个要枚举的对象以及媒体的范围。

·第二个要判定是否是可能解的判定结果条件就可以了。

关于理论知识到底怎么去实践应用,先来举一个比较经典的案例,让它来解决一道数学问题。当然是通过媒体法结合四家家的编程来解决经典的数学问题,这个名字叫鸡兔同笼。相信有很多同学可能在小学二年级、三年级都经历过。

有人可能会问现在总共鸡和兔子的头总共有三十个,脚总共有九十只,现在问笼中的鸡和兔各有多少只?其实说白了就是告诉你了两个条件,鸡和兔的头加到一块是三十个,鸡和兔的脚加到一块是九十个。

当然要解决这个问题首先得具备生活常识,比如一只鸡有几只头?只有一只头,一只兔子只有几只头?也是一只头,所以一只头的数量是三十个,相当于鸡和兔子总共的数量是三十个。

另外还有一个生活常识就是脚,一只鸡的脚有几只?有两只脚,一只兔子有几只脚?答案是有四只脚,把鸡的数量乘以二加上兔子的数量乘以四就是脚所总共的数量九十只。

当然如果大家是要用数学的方法,方法有很多,比如假设已经是初中生了,可能已经学过一元一次方程或者二元一次方程,可以用方程式去解决。另外如果是小学生,其实也可以用思维的方式去解决都可以。

当然今天重点来讲计算机是如何利用媒体法来解决这样一个数学问题的。首先先分析一下,既然媒体法有两步,第一步要确定媒体对象,第二步来判定条件,就按照这两步走,来确定分别怎么做。

·第一步,媒体的对象和范围。题目里面有一个条件叫已知头总共三十个,这个条件其实已经给了一个范围了,也就说鸡和兔子的头的总数量是三十个,鸡的数量最多是三十只。因为当有三十只鸡的时候,相当于鸡和兔子的头的总数量是三十个,鸡的数量最多是三十只。已经有三十个头了,每只鸡有一个头吗?当然鸡的数量最少也不可能是负数,因为是数量最少是零只,这样就可以来确定美举的对象了。美举谁?美举鸡的数量,范围是多少的?从零开始,美举一直每举到多少?三十,把美举的对象和范围就设定好了。

接下来如何来判定它是不是想要的数量?重点判定条件就是假设鸡已经让鸡来美举了,比如作为放循环里面的一个爱,让它大于等于零,小于等于三十,代表爱就代表鸡的数量。这时候根据已知条件,头总共三十个就意味着鸡和兔的数量总共是三十个。

如果鸡是爱之,兔子就只有可能是三十减爱之。再根据另外一个已知条件,一只鸡有两只脚,鸡的脚就是二乘以i,一只兔子有四只脚,兔子的脚就是三十减二,括起来乘以四,最后它们的所有的脚的数量加起来应该等于多少?等于九十,这是不就是一个判定条件?

把前面的表达式一计算,然后和九十来判定是否相等。如果想等了就输出鸡的数量i和兔子数量三之减i,是不是就办到了?以上就关于鸡兔同笼问题用美举算法该如何思考的过程。

接下来打开第五c加加,看用代码的方式如何来实现?还是对照着这样一个分析一块来做,这样大家在例子中、在实践中就知道美举算法到底应该怎么去用了。

·首先把c加加的基本头、基本框架敲出来,听过王老师的课的都知道,一般情况cr的头会比较多,建议直接引用万能头就可以了。

·第二行基本框架使用命名空间。

·第三行是一个内函数,记得它的一对小框、一对大框。

·最后程序结束的时候用return零是第一次课,就写一个一杠一,鸡兔同笼问题,来写一个注释。

本道题的编程目的是为了实现什么?g two实现编程解决g two同等问题。

·先来看第一个,就是媒体对象和范围。先创建一个变量,假设这个变量叫i,i决定它代表的是鸡的数量。为什么要代表鸡的数量?因为刚刚分析了,美举的对象要么是鸡要么是兔,已经决定了要美举谁?美举鸡,其实美举兔是不是一样?所以要选定一个对象。

有了对象之后,兔子的数量、鸡的数量最小是零,最大是三十,每次举一,来美举一个都不放过,二等于零表示零只鸡,然后加加变成一只鸡,再加加变成二只鸡,再加加一直加加加,最多三十只鸡,这样就叫负循环,美举鸡的所有可能性。

接下来就要判定了,就是来写一个易复语句,如果鸡是二只,那么它的脚应该是二乘以二,这样兔子的数量就应该是三十减二,因为鸡和兔的总数量是三十只是,然后兔子的脚应该再乘以四,来判定它是否等于。

当然这个等号是指前面的加法和乘法的混合运算是否等于谁,等于角的总数量九十只。如果等于了怎么办?就c out g 的数量,然后空格隔开输出兔子的数量是三十减二,当然它有可能会有多个解,每一个减输出一行,然后让它换行就可以了。

这个题目是不是就轻松实现了?美举的特征主要在这,这个是美举的对象,爱是鸡,美举的范围是从零到三十加加一个都不放过。

第二个特征就是美举判定条件,看条件成熟了,输出想要的解就可以了。来运行一下,看最终鸡和兔的数量到底是多少只?它给的答案是鸡的数量是十五只,兔子数量是十五只。

首先先算一算,十五只鸡有十五个头,十五只兔子有十五个头,总共是十五加十五,三十个头头是对的,十五只鸡每只鸡有两只脚,这样十五乘以二就是三十只脚,十五只兔子每只兔子有四只脚,十五乘以四就是六十只脚,三十加六十等于九十,答案是正确的。

而且就放循环已经告诉了答案是唯一的答案,因为它将所有的可能性是不是都试完了?

以上就关于鸡兔同笼问题的美举算法的编程实现,也发现了用了美举算法其实思路相当清晰,确定要美举的对象,然后确定媒体对象所对应的范围,用放循环来实现,然后来判定条件,判定这个解是否是想要的解,如果是输出就可以了,直到把所有可能性全部判定完毕。

美举的过程过程就结束了,这个过程这种算法就称为叫美举法,也称为叫穷举法,它是一种经典的暴力算法。

以上是今天的第一次课关于美举与算法的算法思想,就先讲解到这,各位同学,拜拜。

标签: #枚举算法的算法结构是