首页 > 编程语言 >YU_C++算法学习笔记 · 枚举

YU_C++算法学习笔记 · 枚举

时间:2024-10-19 13:32:03浏览次数:7  
标签:int 样例 算法 C++ 枚举 等式 火柴 YU

1.1 枚举类问题

· 枚举是什么?

枚举也叫穷举,是计算机解决问题最基本的策略。其方法是一一列举所有的可能性,根据题意要求进行合理的判断或计算,最终得到答案,本质上就是一种搜索算法

基础的枚举就是人们常说的“暴力”求解。对于不同的问题,不可过分依赖“暴力”求解,应该根据具体的场景来进行具体分析,选择更加简洁和高效的算法。

枚举就是用forwhile等循环来实现的,通常都一个一个的去试。如果试的数据符合已知条件,则就认为,这个数就是要的答案,就不再枚举下去了。所谓枚举,其实就是慢慢去试过去。但枚举有个坏处,若数据很大,很多,则枚举的范围就很广,又费空间,还费时间。所以用枚举的时候要想好空间范围,以确保达到时间的最简,与空间的最省。

枚举算法的运用场景就是适用于问题规模较小、解空间可穷举的情况

\(思路很好想,代码很好写,只不过速度慢了一些。\)

· 总结一下:

  1. 运用循环把所有可能全试一遍,再根据题意做题。
  2. 枚举算法优点在于简单直观,不需要复杂的数学推导,易于实现。
  3. 缺点那就是运算量过大,当问题的规模变大的时候,循环的阶数越大,执行速度越慢,很容易超时。

1.2 枚举题目讲解

· P1149 [NOIP2008 提高组] 火柴棒等式

· 大意:

给你 \(n\) 根火柴棍,你可以拼出多少个形如 \(A+B=C\) 的等式?等式中的 \(A\)、\(B\)、\(C\) 是用火柴棍拼出的整数(若该数非零,则最高位不能是 \(0\))。用火柴棍拼数字 \(0\sim9\) 的拼法如图所示:

注意:

  1. 加号与等号各自需要两根火柴棍;
  2. 如果 \(A\neq B\),则 \(A+B=C\) 与 \(B+A=C\) 视为不同的等式(\(A,B,C\geq0\));
  3. \(n\) 根火柴棍必须全部用上。

样例 #1

样例输入 #1
14
样例输出 #1
2

· 讲解

我们可以先得到\(0-9\)各需要多少根火柴棒,然后再推出二位数,三位数,四位数各需要多少火柴棒。处理完后,我们可以直接枚举\(A\)和\(B\)。(可以证明\(A和B\)最大值为1111)、

\(Code:\)

点击我~ 获取代码
#include<bits/stdc++.h>
using namespace std;
int ans=0,n;  //答案和火柴棒个数 
int z[3005]={6,2,5,5,4,5,6,3,7,6};  //0~9所需的火柴棒 
void f()  //预处理出10~1111的所需火柴棒 
{
	for(int i=10;i<=2222;i++)
		z[i]=z[i/10]+z[i%10];  //i/10为十位,i%10为个位 
}
int main()
{
	f();  //预处理每个数字应该需要的火柴棒根数 
	cin>>n;
	for(int i=0;i<=1111;i++)
		for(int j=0;j<=1111;j++)
		{
			int k=i+j;  //k是A+B的和 
			if(z[i]+z[j]+z[k]+4==n) //加数+加数+和+等号与加号所需的火柴棒个数 为n的话,ans就++. 
				++ans;
		}
	cout<<ans<<'\n';  //输出 
	return 0;
}


标签:int,样例,算法,C++,枚举,等式,火柴,YU
From: https://www.cnblogs.com/yuhxq/p/18475796

相关文章

  • 《 C++ 修炼全景指南:十六 》玩转 C++ 特殊类:C++ 六种必备特殊类设计的全面解析
    摘要这篇博客深入探讨了六种C++特殊类的设计及其技术细节。首先,介绍了如何设计只能在堆上或栈上创建对象的类,通过控制构造函数的访问权限来限定对象的内存分配区域。接着,探讨了如何设计一个不能被拷贝的类,避免资源重复释放的问题。随后,介绍了如何防止类被继承以及单例模......
  • 位置式与增量式PID控制器理论与C++实现
    1理论推导1.1PID式中: ——控制器的输出;——控制器的输入(常常是设定值与被控量之差);Kp——控制器的比例放大系数;Ti——控制器的积分时间;Td——控制器的微分时间;1.2位置式PID设为第k次采样时刻控制器的输出值,可得离散的PID算式,又称位置式PID算式:e(k):用户设定的值(目标......
  • AI绘画:2024最全面的ComfyUI插件与Lora的下载及使用!
    前言本节我们介绍ComfyUI插件和Lora的下载及使用方式。1.安装1.1Checkpoint安装将从前面介绍的模型下载平台下载后,放在ComfyUI/models/checkpoints文件夹下。1.2Lora安装在前面介绍的模型下载网站下载Lora模型,然后放在ComfyUI/models/loras文件夹下。所有的AI设......
  • pear-admin-layui-main 4.0 admin.js bug 修复
    pearAdmin.instances.tabPage=tabPage.render({ elem:'content', session:param.tab.session, index:0, tabMax:param.tab.max, preload:param.tab.preload, closeEvent:function(id){ pearAdmin.instan......
  • C++内存模型实践探索
    前言C++对象模型是个常见、且复杂的话题,本文基于ItaniumC++ABI通过程序实践介绍了几种简单C++继承场景下对象模型,尤其是存在虚函数的场景,并通过图的方式直观表达内存布局。本文展示的程序构建环境为Ubuntu,glibc2.24,gcc6.3.0。由于clang和gcc编译器都是基于ItaniumC++ABI......
  • C++ WM\_COPYDATA 实现进程通信
    基于MFC用于存储数据的自定义结构体:structMSG_STRUCT{ wchar_tmsg[256];};发送端,发送按钮响应事件的代码voidCSendWM_COPYDATADlg::OnBnClickedSendmessage(){ MSG_STRUCTsmsg; GetDlgItemText(IDC_MESSAGE,smsg.msg,256); HWNDhTargetWnd=NULL; hTargetWnd=::Fi......
  • C++使用共享内存实现进程间通信
    C++使用共享内存实现进程间通信文件映射是一种实现进程间单向或双向通信的机制。它允许两个或多个本地进程间相互通信。为了共享文件或内存,所有的进程必须使用相同的文件映射的名字或是句柄。为了实现共享文件,第一个进程先调用CreateFile方法。接下来调用CreateFileMappin......
  • 算法笔记 C/C++快速入门 | 全章节整理
    目录零.【C语言中的输入和输出函数】sscanf应用场景1:解析用户输入应用场景2:解析文件内容应用场景3:处理网络协议数据应用场景4:字符串解析和数据转换应用场景5:解析复杂的日志数据其他应用场景:scanf 一【编程语言相关】c和cpp二.【数据结构相关】结构体循环定......
  • C++之类和对象2
    文章目录1.类的默认成员函数有哪些2.构造函数3.析构函数4.拷贝构造函数5.赋值运算符重载函数5.1运算符重载5.2赋值运算符重载函数6.取地址运算符重载函数6.1const成员函数6.2普通取地址重载函数与const取地址运算符重载函数1.类的默认成员函数有哪些默认构造函数是......
  • 枚举类型
    一、在jvm1.5之前创建枚举类的方法五步走/*1.创建枚举类的属性(成员遍历),必须是作为私有常量出现2.必须将构造方法私有化,这是为了保证类的对象是有限个的目的3.提供公共的静态的final方法给外界获取枚举类中多个对象4.提供公共的获取属性的方法5.......