【算法】蛮力法/穷举法/枚举法 的基本问题分析

您所在的位置:网站首页 百钱买百鸡使用了什么算法策略 【算法】蛮力法/穷举法/枚举法 的基本问题分析

【算法】蛮力法/穷举法/枚举法 的基本问题分析

2023-12-26 18:41| 来源: 网络整理| 查看: 265

炮兵问题的优化,设立逻辑数组 蛮力法设计思想

有策略地穷举 + 验证

制定穷举策略避免重复

简单来说,就是列举问题所有可能的解,然后去看看是否满足题目要求,是一种逆向解题方式。(我也不知道答案是什么,但是我知道答案肯定在这些范围里面,我一个个试就完了。)

所以我们应该做的是

知道可能的答案都有哪些使用方法将其一一列举将每个解依次与条件比照 蛮力法使用范围

在这里插入图片描述

所有解空间:例如a,b,c取值范围都是 0~9,问abc组成的三位数的所有情况所有路径:遍历图、遍历树 蛮力法的格式

蛮力法由循环和选择语句构成

使用循环,穷举所有情况使用选择,判断当前情况是否成立 若成立,则得到问题的解若不成立,则继续循环

循环 + 分支

for(){ for(){ // 获取X所有可能的情况 if(X满足条件){ printf("X"); } } } 蛮力法思想:穷举所有情况,找到符合条件的。

这也意味着,得能够穷举,因此问题规模不能太大。

示例1:求完全数

在这里插入图片描述 思想:穷举所有数字,将符合条件的找出来。

关键点:求数字的所有因子。 对于数x,因子y,需要x % y = 0,此处y也需要尝试1 ~ x-1的所有数。

判断因子和是否等于x。

因此程序为

// 求完全数 #include using namespace std; int main() { for (int i = 2; i if (i % j == 0) { // 若是因子 sum += j; } } if (sum == i) { cout int sum = 0; int temp = i; while (temp){ int x = temp % 10; sum += (x*x*x); temp /= 10; } if (i == sum) { cout for (b = 0; b for (d = 0; d // 若5个数都不同,再看是否满足表达式 if (!(a == b || a == c || a == d || a == e || b == c || b == d || b == e || c == d || c == e || d == e)) { int add1 = a * 1000 + b * 100 + c * 10 + d; int add2 = a * 1000 + b * 100 + e * 10 + d; int sum = e * 10000 + d * 1000 + c * 100 + a * 10 + d; if (sum == add1 + add2) { cout for (b = 0; b for (d = 0; d for (f = 0; f cout // 转换为二进制,除二求余再倒置 int temp = i; for (int j = 5; j >= 0; j--) { number[j] = temp % 2; temp /= 2; } // 输出结果 for (int k = 0; k int x[10]; int a, b, c, d, e, i, m, n, s; for (i = 0; i x[b] = 0; /*表示不能再让其他变量取与b相同的值*/ for (c = 0; c x[d] = 0; /*表示不能再让其他变量取与d相同的值*/ for (e = 0; e int x, y, z; for (x = 0; x if ((100 - x - y) % 3 == 0) { if ((5 * x + 3 * y + (100 - x - y) / 3) == 100) { cout // 求三个数平方和 int sum = 0; int temp = i; while (temp) { int x = temp % 10; sum += (x * x); temp /= 10; } // 验证 if (sum == i % 11) { cout for (z = 0; z cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3