算法--枚举

枚举算法介绍

枚举算法是一种基本的算法思想,它通过穷举所有可能的情况来解决问题。它的基本思想是将问题的解空间中的每个可能的解都枚举出来并进行验证和比较,找到满足问题条件的最优解或者所有解。
枚举算法适用于问题规模较小、解空间可穷举的情况。它的优点是简单直观,不需要复杂的数学推导,易于实现。但是,由于需要穷举所有可能的情况,对于问题规模较大的情况,枚举算法的时间复杂度可能会非常高,效率较低。

模拟枚举这类没有具体结构的算法,最好的办法就是直接看题目:

下面开始举例:

eg1:lanqiao OJ 191 特别数的和

56c20ece77a5458db703ab7437901d6d.png

题目分析:

  这道题的解题思路其实特别简单,就是找到1-n满足条件的数,然后加起来就行了;

  那显而易见,我们只需要写一个函数去判断这个数是否满足条件,然后再从1-n经行枚举判断最后相加;

代码如下:

//枚举 lanqiao OJ 191 特别数的和
#include<bits/stdc++.h>
using namespace std;
int check(int n)
{
	while(n)
	{
		int s=n%10;
		if(s==1||s==2||s==9||s==0)
		{
			return 1;
		}
		n=n/10;
	}
	return 0;
}
int main()
{
	int ans=0;
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
	   if(check(i))
	   ans+=i;	
	}
	cout<<ans;
	return 0;
}

 

下一题:

eg2:lanqiao OJ 152 反倍数

5772302952324a51b0d11d0c5def5d52.png

解题思路:

  这道题和上一题思路几乎一样,先写一个函数找到·符合条件的数。然后再一一枚举

下面直接看代码:

//枚举 :lanqiao OJ 152 反倍数
#include<bits/stdc++.h>
using namespace std;
bool check(int n,int a,int b,int c)
{
	if(n%a!=0&&n%b!=0&&n%c!=0)
	return true;
	return false;
}
int main()
{
	int n,a,b,c;
	cin>>n>>a>>b>>c;
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		if(check(i,a,b,c))
		ans++;
	}
	cout<<ans;
	return  0;
}

 

eg3:lanqiao OJ 3227 找到最多的数

d786f47ce2644120bec23934b8405374.png

解题思路:

  这道题在蓝桥云属于简单类,刚学敲代码的获取也能写出来,但是这里我想用map函数带大家做一遍;

上代码:

#include<bits/stdc++.h>
using namespace std;
//定义map<int,int>;第一个int代表元素,第二个int代表该元素的数目
//即map<元素,对应元素数量>
map<int,int>mp;
int main()
{
    //运用分布流加快速度
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int n,m;
	cin>>n>>m;
	//输入
	for(int i=1;i<=n*m;i++)
	{
	 int x;
	 cin>>x;
	 //直接把值传入mp;
	 mp[x]++;		
	}
	for( auto [x,y]:mp)
	{
	    //一定得是完全大于
		if(y*2>n*m)
		cout<<x<<endl;
	}
	return 0;
}

枚举算法大概就介绍到这里了,枚举我们又常称作暴力枚举,单独考察枚举一般不会太难,但是使用枚举一定要考虑复杂度,不然很可能超时;

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值