做网站用go语言还是php,凡科登录入口app下载,asp网站vps搬家,wordpress login 图标枚举和模拟算法是计算机领域常用的两种基本算法。枚举算法是一种通过列举所有可能的情况来解决问题的方法。模拟算法则是通过模拟真实场景来解决问题。
枚举、模拟法
枚举算法是指将问题分解为一系列离散的情况#xff0c;通过枚举所有可能的情况#xff0c;逐一检查每种情…枚举和模拟算法是计算机领域常用的两种基本算法。枚举算法是一种通过列举所有可能的情况来解决问题的方法。模拟算法则是通过模拟真实场景来解决问题。
枚举、模拟法
枚举算法是指将问题分解为一系列离散的情况通过枚举所有可能的情况逐一检查每种情况来解决问题。这种算法适合解决一些问题的最优解问题但是当数据规模较大时会因为枚举的数量过多而导致运行时间增长。
模拟算法是指将一个问题的真实情况模拟出来并对问题进行推演以便得到问题的解决方案。
例如蓝桥杯 卡片 - 蓝桥云课 (lanqiao.cn)
题目描述
用卡片拼数字拼过的卡片不能再用有 0 到 9 的卡片各 2021 张共 20210 张请问小蓝可以从 1拼到多少
解题思路
比较容易的模拟我们从1开始枚举每次检查剩下的卡片能不能拼出这个数字就好。 把一个数在10进制下每个位置的数字求出来——先对10取模个位上的数字就求出来了再除以10原本十位上的数字就变到了个位上再对10取模...依次进行下去就求出来了。把当前拼的这个数每一位都拆出来看看那个数字的卡片还够不够不够的话就说明拼不了这时候退出循环所以最多拼到上一个数。
我的代码
#include iostream
using namespace std;
int main()
{// 请在此输入您的代码int a[10]{2021,2021,2021,2021,2021,2021,2021,2021,2021,2021};for(int i0;i20210;i){int n i;while(n) {int d n % 10;if(a[d] 0) {cout i - 1 endl;return 0;}a[d]--;n / 10;} }return 0;
}
例如蓝桥杯 数的分解 - 蓝桥云课 (lanqiao.cn)
题目描述
把2019分解成3个各不相同的正整数之和并且要求每个正整数都不包含数字2和4一共有多少种不同的分解方法?
注意交换3个整数的顺序被视为同一种方法例如1000100118和1001100018被视为同一种。
解题思路
我们定义这三个各不相同的正整数为i, j, k并且必须满足ijk。这样避免重复计算。
我们可以枚举i从1-2019 ,枚举j从1-2019,再枚举k从1-2019这个题是填空题这么干没问题只是三个for循环的复杂度比较高耗时长一些。
我们可以稍微优化一点点比如可以考虑最内层的k ,当ij确定了之后k的值自然就确定了变成了2个for循环复杂度就会降低一些剩下我们只需要检查i,j,k 是否满足题目说的不含2和4即可。
怎么检查呢
我们可以用字符串的函数to_string和find去做,详细见我的代码
我的代码
#include iostream
using namespace std;
int main()
{// 请在此输入您的代码int sum0,i,j,k;for(i1;i673;i){for(ji1;j1009;j){k2019-i-j;string ato_string(i);string bto_string(j);string cto_string(k);if(a.find(2)-1a.find(4)-1b.find(2)-1b.find(4)-1c.find(2)-1c.find(4)-1)if(jk)sum;}}coutsum;return 0;
}