枚举(蓝桥练习)

目录

一、枚举算法介绍

二、解空间的类型

三、循环枚举解空间

四、例题

(一、反倍数)

(二、特别数的和)

(三、找到最多的数)

(四、小蓝的漆房)

(五、小蓝和小桥的挑战)


一、枚举算法介绍

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

二、解空间的类型

解空间可以是一个范围内的所有数字(或二元组、字符串等数据),或者满足某个条件的所有数字
当然也可以是解空间树,一般可分为子集树和排列树,针对解空间树,需要使用回溯法进行枚举(在后面讲到搜索的时候会讲到)。
我们目前仅使用循环去暴力枚举解空间,具体的解空间类型需要根据题目来理解构造。

三、循环枚举解空间

1.首先确定解空间的维度,即问题中需要枚举的变量个数。例如当题目要求的是满足条件的数字时,我们可以循环枚举某个范围内的数字。如果要求的是满足条件的二元组,我们可以用双重循环分别枚举第一个和第二个变量,从而构造出一个二元组。
2.对于每个变量,确定其可能的取值范围。这些范围可以根据问题的性质和约束条件来确定。
这一步往往是时间复杂度优化的关键。
3.在循环体内,针对每个可能解进行处理。可以进行问题的验证、计算、输出等操作

四、例题

(一、反倍数)

用户登录

题目描述
给定三个整数 a,b,c,如果一个整数既不是 a的整数倍也不是b的整数倍还不是 c的整数倍,则这个数称为反倍数。
请问在 1至 n 中有多少个反倍数。
输入描述
输入的第一行包含一个整数 n。
第二行包含三个整数 a,b,c,相邻两个数之间用一个空格分隔。其中,1≤n<1000000,1≤a≤n,1≤b≤n,1≤c≤n
输出描述
输出一行包含一个整数,表示答案。

#define  _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
using namespace std; // 使用std命名空间,以便直接使用cout、cin等,而不是std::cout、std::cinint a, b, c;bool f(int x)
{return x % a != 0 && x % b != 0 && x % c != 0;
}int main()
{int n; cin >> n;cin >> a >> b >> c;int ans = 0;for (int i = 1; i <= n; ++i){if (f(i))ans ++;}cout << ans << '\n';return 0;
}

(二、特别数的和)

用户登录

题目描述
小明对数位中含有 2、0、1、9的数字很感兴趣(不包括前导 0),在1到40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是574。
请问,在1到n中,所有这样的数的和是多少?
输入描述
输入格式:
输入一行包含两个整数 n(1≤n≤ 104)
输出描述
输出一行,包含一个整数,表示满足条件的数的和。

#include <bits/stdc++.h>
using namespace std;bool f(int x)
{while (x){int y = x % 10; //个位数if (y == 2 || y == 0 || y == 1 || y == 9)return true;x /= 10; //缩小十倍,向下取整}return false;
}int main()
{int n; cin >> n;int ans = 0;for (int i = 1; i <= n; ++i){if (f(i))ans += i;}cout << ans << '\n';return 0;
}

(三、找到最多的数)

题目描述
小明对数位中含有 2、0、1、9的数字很感兴趣(不包括前导 0),在1到40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是574。
请问,在1到n 中,所有这样的数的和是多少?
输入描述
输入格式:
输入一行包含两个整数n(1≤n≤ 104)

用户登录

#include <bits/stdc++.h>
using namespace std;bool f(int x)
{while (x){int y = x % 10;if (y == 2 || y == 0 || y == 1 || y == 9)return true;x /= 10;}return false;
}int main()
{int n; cin >> n;int ans = 0;for (int i = 1; i <= n; ++i){if (f(i))ans += i;}cout << ans << '\n';return 0;
}

(四、小蓝的漆房)

用户登录

问题描述
小蓝是一位有名的漆匠,他的朋友小桥有一个漆房,里面有一条长长的走廊,走廊两旁有许多相邻的房子,每间房子最初被涂上了一种颜色。
小桥来找小蓝,想让他把整个走廊都涂成同一个颜色。小蓝告诉小桥,他每天只能涂一段长度为ん的区间。对于每个区间,他可以选择将其中的房子重新涂上任何一种颜色,或者保持原来的颜色不变
小桥想知道小蓝至少要涂几天,才能让整个走廊变得美丽。
请帮助小桥解决这个问题。
输入格式
第一行包含一个整数t(1< 100),表示测试用例的数量.
每个测试用例的第一行包含两个整数 n 和 k(1 ≤ k≤n< 104),第二行包含几 个整数 a1,a2,···,an(1 < ai< 60),分别表示每个房子最初的颜色。
保证所有测试用例中 n 的总和不超过 10000。

#include <bits/stdc++.h>void solve(const int &Case) {int n, k;std::cin >> n >> k;std::vector<int> a(n);for (auto &x: a)std::cin >> x; //range-for-eachint ans = n + 1;for (int c = 1; c <= 60; c++) {//枚举最终颜色int ret = 0;//存放当前最终颜色for (int i = 0; i < n; i++) {if (a[i] != c) { // 如果出现一个与最终颜色不同的位置, 则贪心地选择该位置为染色的起点//i,i + 1,i + 2,...,i +k - 1 都会被立刻染成最终颜色ret++;i = i + k - 1;}}ans = std::min(ans, ret);}std::cout << ans << '\n';
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int T = 1;std::cin >> T;for (int i = 1; i <= T; i++)solve(i);return 0;
}

(五、小蓝和小桥的挑战)

用户登录

#define  _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int a[N], t, n;
int main()
{cin >> t;while (t--){cin >> n;int sum = 0, z = 0;for (int i = 1; i <= n; ++i){cin >> a[i],sum += a[i];if (!a[i])++z;//如果a[i] == 0,执行一次操作}sum += z;//输入的数 + 执行加一后的次数if (sum == 0)//如果和为0cout << z + 1 << '\n';else cout << z << '\n';}return 0;
}

 乘积和加法的和都不为0
 如果只考虑乘积不为0
 如果乘积为0,则说明存在零(zero)元素
 此时的答案一定是所有零(zero)元素都加一
 如果只考虑加法为0, 那么随便选择一个数加一
 回到原问题, 同时考虑乘法和加法
 1.乘积为0, 且加法也为0
 此时将所有零(zero)元素加一即可
 2.乘积为0, 加法不为0
 2.1.乘积为0, 加法不等于零(zero)元素的个数的相反数
 此时将所有零(zero)元素加一即可
 2.2.乘积为0, 加法等于零(zero)元素的个数的相反数
 此时将所有0元素加一后, 再选择一个数加一
 3.乘积不为0,加法为0
 此时将某个正数加一即可
 4.乘积不为0,加法也不为0
 不动

#include <bits/stdc++.h>
void solve(const int &case)
{int n;std::cin >> n;int zeroCount = 0, sum = 0; // zeroCount 记录0的个数,sum 记录所有整数的和  for (int i = 0; i < n; i++) {  int x;  std::cin >> x; // 输入一个整数  if (x == 0) zeroCount++; // 如果输入的整数是0,zeroCount自增  sum += x; // 将输入的整数累加到sum上  }  // 如果存在0,则至少需要zeroCount次操作将0变为非0数(每次操作可以将一个0变成任意非0数)  // 如果不存在0,但所有数的和为0,则至少需要1次操作(将所有数同时加上一个非0数)  // 如果既不存在0,所有数的和也不为0,则不需要操作  if (zeroCount > 0) {  std::cout << zeroCount << '\n'; // 输出将0变成非0数的最少操作次数  } else if (sum == 0) {  std::cout << 1 << '\n'; // 输出将所有数和变成非0数的最少操作次数(1次)  } else {  std::cout << 0 << '\n'; // 不需要操作,直接输出0  }
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);// 取消读入输出的同步流, 取消后不能使用 scanf和printfint T = 1;std::cin >> T;for (int i = 1; i <= T; i++)solve(i);return 0;
}

今天就先到这了!!!

看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注!

你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2814899.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

tkinterFrame框架+标签框架LabelFrame+Toplevel窗口的使用

1.在tkinter中&#xff0c;Frame是一个容器小部件用于组织和管理其他小部件。它可以作为一个独立的可见区域&#xff0c;也可以作为其他小部件的父容器。 import tkinter as tk import tkinter.ttk as ttk import tkinter.messagebox as mbm tk.Tk() m.title("tkinter L…

10.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏发送数据的操作

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;接管游戏连接服务器的操作 码云地址&#xff08;master 分支&#xff09;&#xff1a;染指/titan 码云版本号&#xff1a;00820853d5492fa7b6e32407d46b5f9c01930ec6 代码下载地址&#xff0c;在 ti…

Rocky Linux 运维工具 firewall-cmd

一、firewall-cmd​的简介 ​​firewall-cmd​是基于firewalld的防火墙管理工具。用户可以使用它来配置、监控和管理防火墙规则&#xff0c;包括开放端口、设置服务规则等。 二、firewall-cmd​​的参数说明 序号参数描述1​​–zone指定防火墙区域2–add-portxxx/tcp允许特定…

广和通发布基于MediaTek T300平台的RedCap模组FM330系列及解决方案

世界移动通信大会MWC 2024期间&#xff0c;广和通发布基于MediaTek T300平台的RedCap模组FM330系列&#xff0c;加速5G-A繁荣发展。FM330系列及其解决方案采用全球先进RedCap方案&#xff0c;满足移动宽带和工业互联对高能效的需求。 广和通FM330系列采用全球首款6nm制程且集成…

早产儿视网膜病变分期,自动化+半监督(无需大量医生标注数据)

早产儿视网膜病变 ROP 分期 提出背景解法框架解法步骤一致性正则化算法构建思路 实验 提出背景 论文&#xff1a;https://www.cell.com/action/showPdf?piiS2589-0042%2823%2902593-2 早产儿视网膜病变&#xff08;ROP&#xff09;目前是全球婴儿失明的主要原因之一。 这是…

【DDD】学习笔记-模型对象

不同的建模视角会产生不同的模型&#xff0c;但这并不意味着选择一种建模视角就仅仅会产生一种模型&#xff0c;而是指建模的过程围绕着什么样的模型为核心。领域模型驱动设计自然以领域模型为核心&#xff0c;但在限界上下文内部&#xff0c;分层架构的不同层次仍然可能由不同…

C++:string相关内容的简单介绍

目录 介绍&#xff1a; string类的常见接口说明 1. string类的常见构造 1.1 string(const string& str,size_t pos,size_t len npos); 1.2 string(const char* s) 1.3 string &#xff08;const char * s , size_t n&#xff09;; 1.4 string&#xff08;size_…

图搜索基础-深度优先搜索

图搜索基础-深度优先搜索 参考原理引入流程解析手推例子 代码实现运行结果结果分析 参考 理论参考&#xff1a;深蓝学院 实现参考&#xff1a;github项目 原理 引入 对于这样一个图&#xff0c;我们试图找到S到G的通路&#xff1a; 计算机程序不会像人眼一样&#xff0c;一…

npm淘宝镜像报错certificate has expired

1、概述 vue项目使用npm install命令时&#xff0c;突然报错&#xff1a;“...certificate has expired” 2、解决 1.清空缓存&#xff1a;npm cache clean --force 2.修改镜像&#xff08;管理员运行命令行&#xff09;&#xff1a;npm config set registry https:/…

测评ONLYOFFICE 8.0版本:办公利器再升级

测评ONLYOFFICE 8.0版本&#xff1a;办公利器再升级 前言注册使用升级功能速览全新外观设计wordexcelPPTPDF 协作功能强化更强大的功能复杂表单的填写 移动端优化结语 前言 随着科技的不断发展&#xff0c;办公软件在提升用户体验和工作效率方面扮演着越来越重要的角色。作为一…

element el-date-picker 日期组件置灰指定日期范围、禁止日期范围日期选择

JS如何将当前日期或指定日期转时间戳_javascript技巧_脚本之家 小于指定日期前的日期置灰 比如这里 指定日期是 2024-02-20 10:48:15 disabledDate(time) time是一个函数提供的时间用于比较 他是一个时间戳↓ 理解为我们想要置灰的时间 time.getTime() < timeStamps- 1 *…

可视化图文报表

Apache Echarts介绍 Apache Echarts是一款基于Javascript的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。 官网&#xff1a;Apache ECharts 入门案例&#xff1a; <!DOCTYPE html> <html>…

06 Qt自绘组件:Switch动画开关组件

系列文章目录 01 Qt自定义风格控件的基本原则-CSDN博客 02 从QLabel聊起&#xff1a;自定义控件扩展-图片控件-CSDN博客 03 从QLabel聊起&#xff1a;自定义控件扩展-文本控件-CSDN博客 04 自定义Button组件&#xff1a;令人抓狂的QToolButton文本图标居中问题-CSDN博客 0…

SD-WAN助力企业数据传输安全

随着企业网络需求的不断增长&#xff0c;SD-WAN成为企业网络组网的首选方案&#xff0c;能够实现多种网络拓扑结构的无缝连接&#xff0c;其中包括总部-分支、总部-分支-数据中心、总部-数据中心、总部-分支-云服务等。如何确保企业数据在传输过程中的安全性成为企业关注的重要…

对话式 AI 简化业务的 5 种方式

告别繁琐工作&#xff0c;对话式AI让内部沟通更高效 对话式人工智能正在彻底改变企业与客户互动、简化运营并增强客户体验的方式。 对话式人工智能可以通过以下五种方式改变您的业务&#xff1a; 1. 对话式人工智能&#xff1a;增强客户服务对话式人工智能通过聊天机器人和虚拟…

SpringMVC(2)

目录 SSM整合统一异常处理项目异常处理方案异常解决方案前后端协议联调拦截器 SSM整合 统一异常处理 异常的种类及出现异常的原因: 框架内部抛出的异常&#xff1a;因使用不合规导致数据层抛出的异常&#xff1a;因外部服务器故障导致&#xff08;例如&#xff1a;服务器访问超…

UE 贴地绘制/日历/鼠标光标滚轮位置缩放图片/UMG滚动数据从前后添加新UI/多图片批量下载 收费项目源码资源

基本里面的内容本人CSDN发的都有现成代码.里面大部分是功能实现思路.这里面是把这几个功能合成了一个完整5.1项目源码.拿到即用.收费项目源码资源. 1.贴地绘制 2.日历 3.鼠标光标滚轮位置缩放图片 \ 4.UMG滚动数据从前后添加新UI思路 5.多图片批量下载 这是整合的懒人源码包收…

逆向案例一:AES解密基于数位观察城市数据

import requests import json from Crypto.Cipher import AES # 开始解密 from Crypto.Util.Padding import unpad #去填充的逻辑 import base64 url https://app.swguancha.com/client/v1/cPublic/consumer/baseInfo data {current: 1,"dimensionTime": "20…

langChain学习笔记(待续)

目录 IntroductionLLM的限制扩展理解&#xff1a;什么是机器学习扩展阅读&#xff1a;机器学习的流程 LangChain Introduction LLM的限制 大型语言模型&#xff0c;比如ChatGpt4&#xff0c;尽管已经非常强大&#xff0c;但是仍然存在一些限制&#xff1a; 知识更新&#xff…

jvm常用参数配置

一、 常用参数 -Xms JVM启动时申请的初始Heap值&#xff0c;默认为操作系统物理内存的1/64但小于1G。默认当空余堆内存大于70%时&#xff0c;JVM会减小heap的大小到-Xms指定的大小&#xff0c;可通过-XX:MaxHeapFreeRation来指定这个比列。Server端JVM最好将-Xms和-Xmx设为相同…