当前位置: 首页 > article >正文

第1次课枚举算法

1、核心思想

枚举算法简单直接 ,它直接对问题所有可能情况进行列举,尽可能地尝试所有的方法。它的基本 思想是将问题中每个可能的解都枚举处理 ,并进行验证 ,找到满足条件的解或者所有解。

核心就是:枚举所有的可能。

2、做题思路

枚举的思路是:“将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,保留合适的 ,舍弃不合适的”。枚举的思路可以分三步走:

1、枚举对象:题目求什么?要针对哪个对象循环?应该用多少个循环?

2、枚举范围:循环的边界怎么限定?

3、枚举条件:什么情况枚举能够成功?if 怎么写?有没有嵌套最值问题?

3、经典枚举问题分类

1.   求满足条件的数

2.   百鸡问题

3.   限定两个元素的组合

3.1 满足条件的数

【例题】水仙花数

什么是水仙花数 ,首先它是一个三位整数。这个三位整数满足如下情况; 例如 153 满足  

1*1*1+5*5*5+3*3*3 =153。那么请输出所有的水仙花数 ,中间用空格隔开。

 【问题分析】按照枚举的三部曲走:

1.   枚举对象:题目求什么?求满足条件的三位数 ,故 for 循环枚举需要针对的是三位数 ,需要 一个 for 循环。

2.   枚举范围:水仙花数是一位三位整数 ,故枚举范围为 100~999。

3.   枚举条件:什么情况下枚举成功?我们需要对每一个数字进行尝试 ,判断其是否满足如下条

 ,例如:

100 拆分计算: 1*1*1 + 0*0*0 + 0*0*0 = 1 ! = 100 ----条件不成立

101 拆分计算: 1*1*1 + 0*0*0 + 1*1*1 = 2 ! = 101 ----条件不成立

153 拆分计算: 1*1*1 + 5*5*5 + 3*3*3 = 153 ==153 --- 条件成立

#include <bits/stdc++.h>
using namespace std;

int main() {
    for (int i = 100; i <= 999; i++) {//枚举对象i
        int a = i % 10;         // 个位
        int b = i / 10 % 10;   // 十位
        int c = i / 100;       // 百位
        if (a * a * a + b * b * b + c * c * c == i) {//枚举条件
            cout << i << endl;
        }
    }
    return 0;
}

 


http://www.kler.cn/a/593584.html

相关文章:

  • Ubuntu 软件仓库管理概述与基本原理
  • PCL—passThrough 点云直通滤波器
  • 阿根廷主流收单方式:Rapipago支付
  • 复盘的力量:如何通过复盘提升项目管理水平
  • Postman高级功能深度解析:Mock Server与自动化监控——构建高效API测试与监控体系
  • 【最后203篇系列】020 rocksdb agent
  • Apache Paimon 在抖音集团多场景中的优化实践
  • latex-二项式括号怎么敲?
  • 【嵌入式学习】补码-加减乘除电路
  • Linux系统docker部署Ollama本地大模型及部署Hugging Face开源模型,ollama相关注意点,非ollama模型创建,模型量化,显存建议
  • 服务器相关的硬件知识
  • git推送代码相关学习——(一)
  • llama源码学习·model.py[3]ROPE旋转位置编码(2)旋转角度生成代码
  • pytest基础学习
  • 【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制
  • Python IP解析器 ip2region使用
  • P1540 [NOIP 2010 提高组] 机器翻译
  • cmake 之 CMakeLists.txt 中的函数是从哪里来的
  • 再学:ERC20-Permit2、SafeERC20方法 详解ERC721,如何铸造一个NFT以及IPFS的作用
  • Linux Vim 寄存器 | 从基础分类到高级应用