详细实例说明+典型案例实现 对枚举法进行全面分析 | C++

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

第五章    枚举法


目录

第五章    枚举法

前言

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依次减去123...直到运算到哪一个数时相减的结果开始出现负数。

#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个相同的小球放入ABC三个盒子中请问共有多少种不同的放法。这时就用到了枚举法去对该问题进行列举分类可以将其分为三类①三个球放在一起 ②二个球放在一起 ③ 单独一个球放在一起具体情况如下图所示

第一类

第二类
第三类

二、枚举法的典型案例——鸡兔同笼&质数求解

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();
}

 ③ 结果展示


总结

        以上就是我们对枚举法的所有总结由于该算法比较简单所以我们不对其做过多的总结。

                                               <您的三连和关注是我最大的动力>

                       🚀 文章作者Keanu Zhang        分类专栏算法之美C++系列文章

 

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++