详细实例说明+典型案例实现 对枚举法进行全面分析 | C++
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详细实例说明+典型案例实现 对枚举法进行全面分析 | C++相关的知识,希望对你有一定的参考价值。
第五章 枚举法
::: hljs-center
目录
第五章 枚举法
●前言
1.简要介绍
2.代码及结果示例(简单理解)
3.生活实例
●二、枚举法的典型案例——鸡兔同笼&质数求解
1.鸡兔同笼
2.质数求解(枚举法)
●总结
:::
前言
简单的来说,算法就是用计算机程序代码来实现数学思想的一种方法。学习算法就是为了了解它们在计算机中如何演算,以及在当今的信息时代,它们是如何在各个层面上影响我们的日常生活的,从而提高我们的逻辑思维能力和处理实际问题的能力。善用算法、巧用算法,是培养程序设计逻辑的重中之重,许多实际的问题都可用多个可行的算法来解决, 但是要从中找出最优的解决算法却是一项挑战。
一、枚举法是什么?
1.简要介绍
枚举法又被称为穷举法、暴力法,是一种常见的数学方法。也是经常被使用的一种算法,它的核心思想:将问题所有的可能性列举出来,再根据具体问题的要求去逐一列举解答。或者为了去便于解决问题,进而将问题分为不重复,不遗漏的多种情况,对其进行逐一解决从而最终达到解决整个问题的目的。该方法的缺点就是速度慢,在程序中的执行效率低,但一般情况下该方法下的结果比较准确。
2.代码及结果示例(简单理解)
①将A、B两个子字符串连接起来,就是将B字符串的每一个字符从第一个字符开始逐步连接到A字符串的最后一个字符,如下图所示:
#include<iostream>
using namespace std;
class meiju
public:
void connect()
int record = 0; //记录下标
for (int count = 0; strA[count] != \\0; count++)
record++;
for (int count = 0; strB[count] != \\0; count++, record++)
strA[record] = strB[count];
cout << "合并后的字符串A:";
for (int i = 0; i < record; i++)
cout << strA[i];
char strA[20];
char strB[10];
;
void text()
meiju mj;
cout << "输入字符串A:";
cin >> mj.strA;
cout << "输入字符串B:";
cin >> mj.strB;
mj.connect();
int main()
text();
②将1000依次减去1,2,3,...,直到运算到哪一个数时,相减的结果开始出现负数。
#include<iostream>
using namespace std;
void text()
int sum = 1000,i;
for (i = 1; sum > 0; i++)
sum -= i;
cout << i-1 << endl;
int main()
text();
3.生活实例
有一天老师给同学们出了一个有趣的问题,把3个相同的小球放入A,B,C三个盒子中,请问共有多少种不同的放法。这时就用到了枚举法去对该问题进行列举分类,可以将其分为三类:①三个球放在一起 ②二个球放在一起 ③ 单独一个球放在一起,具体情况如下图所示: (第一类) (第二类) (第三类)
二、枚举法的典型案例——鸡兔同笼&质数求解
1.鸡兔同笼
①具体情况
鸡兔同笼,是中国古代著名典型趣题之一,大约在1500年前,《孙子算经》中就记载了这个有趣的问题。在生活中,它是一个简单的数学问题。但在程序代码中我们如何该去实现它,它会用到哪些方面的算法思想是值得我们去思考学习的。
②代码实现(C++)
输入头和脚总数目,用程序代码去计算出鸡和兔分别各有多少只。
#include<iostream>
using namespace std;
class meiju
public:
void func()
//i表示鸡 j表示兔
for (int i = 0; i <= head; i++)
int j = head - i;
if (i * 2 + j * 4 == foot)
chicken = i;
rabbit = j;
cout << "鸡的数目:" << chicken << endl;
cout << "兔子的数目:" << rabbit << endl;
int chicken;
int rabbit;
int head;
int foot;
;
void text()
meiju mj;
cout << "请输入头的总数量:" ;
cin >> mj.head;
cout << "请输入脚的总数量:" ;
cin >> mj.foot;
mj.func();
int main()
text();
③ 结果展示
2.质数求解(枚举法)
①具体情况
质数就是大于1并且除了自身外无法被其他整数整除的数,如2、3、5、7、11、13等等。在求质数的过程中,可以适当的运用一些技巧以减少循环检查的次数,从而剪断时间,提高代码执行效率。
②代码实现(C++)
输入一个数,判断该数是不是质数。
#include<iostream>
#include<cmath>
using namespace std;
class prime
public:
void isprime()
int i = 2,record=0;
while (i <= sqrt(n))
if (n % i == 0)
record = 1;
i++;
if(record==1)
cout << "该数不是质数" << endl;
else
cout << "该数是质数" << endl;
int n;
;
void text()
prime p;
cout << "请输入除1以外的数:";
cin >> p.n;
p.isprime();
int main()
text();
③ 结果展示
总结
以上就是我们对枚举法的所有总结,由于该算法比较简单,所以我们不对其做过多的总结。
以上是关于详细实例说明+典型案例实现 对枚举法进行全面分析 | C++的主要内容,如果未能解决你的问题,请参考以下文章
详细实例说明+典型案例实现 对动态规划法进行全面分析 | C++