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

NO.58十六届蓝桥杯备战|基础算法-枚举|普通枚举|二进制枚举|铺地毯|回文日期|扫雷|子集|费解的开关|Even Parity(C++)

枚举

顾名思义,就是把所有情况全都罗列出来,然后找出符合题⽬要求的那⼀个。因此,枚举是⼀种纯暴⼒的算法。
⼀般情况下,枚举策略都是会超时的。此时要先根据题⽬的数据范围来判断暴⼒枚举是否可以通过。
使⽤枚举策略时,重点思考枚举的对象(枚举什么),枚举的顺序(正序还是逆序),以及枚举的⽅式(普通枚举?递归枚举?⼆进制枚举)

普通枚举

P1003 [NOIP 2011 提高组] 铺地毯 - 洛谷

枚举所有的地毯,判断哪⼀个地毯能够覆盖(x, y)这个位置。
优化枚举⽅式:

  • 因为我们要的是最后⼀个能够覆盖x,y位置的地毯,那么逆序枚举所有的地毯,第⼀次找到覆盖x,y位置的就是结果;
  • 如果从前往后枚举,我们⾄少要把所有地毯都枚举完,才能知道最终结果。
    ![[Pasted image 20250325171250.png]]

a要小于等于x
b要小于等于y
x要小于等于a+g
y要小于等于b+k

#include <bits/stdc++.h>
using namespace std;const int N = 1e4 + 10;
int n;
int a[N], b[N], g[N], k[N];
int x, y;int find()
{for (int i = n; i >= 1; i--){if (a[i] <= x && b[i] <= y && a[i] + g[i] >= x && b[i] + k[i] >= y){return i;}}return -1;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n;for (int i = 1; i <= n; i++) cin >> a[i] >> b[i] >> g[i] >> k[i];cin >> x >> y;cout << find() << endl;return 0;
}
P2010 [NOIP 2016 普及组] 回文日期 - 洛谷

方法一:枚举x-y之间所有的数字,然后判断是否回文,如果回文,就拆分成年月日,判断是否是合法日期即可
方法二:仅需枚举年份,因为每个年份对应的回文日期只有一个,拆分成回文形式的月日,然后判断是否合法即可
方法三:枚举所有的月和日,然后拼接成相应的年份,判断是否合法

#include <bits/stdc++.h>
using namespace std;int x, y;
int day[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int main()
{ios::sync_with_stdio(false);cin.tie(0);int ret = 0;cin >> x >> y;//枚举月日的组合for (int i = 1; i <= 12; i++){for (int j = 1; j <= day[i]; j++){int k = j % 10 * 1000 + j / 10 * 100 + i % 10 * 10 + i / 10;int num = k * 10000 + i * 100 + j;if (x <= num && num <= y) ret++;}}cout << ret << endl;return 0;
}
P2327 [SCOI2005] 扫雷 - 洛谷

我们发现,当第⼀列中,第⼀⾏的⼩格⼦的状态确定了之后,其实后续⾏的状态也跟着固定下来。⽽第⼀列中,第⼀⾏的状态要么有雷,要么没有雷,所以最终的答案就在0, 1, 2中。
因此,我们枚举第⼀列中,第⼀⾏的两种状态:要么有雷,要么没雷。然后依次计算剩下⾏的值,看看是否能满⾜所给的数据。

#include <bits/stdc++.h>
using namespace std;const int N = 1e4 + 10;int n;
int a[N], b[N];int check1()
{a[1] = 0;for (int i = 2; i <= n+1; i++){a[i] = b[i-1] - a[i-1] - a[i-2];if (a[i] < 0 || a[i] > 1) return 0;}if (a[n+1] == 0) return 1;else return 0;
}int check2()
{a[1] = 1;for (int i = 2; i <= n+1; i++){a[i] = b[i-1] - a[i-1] - a[i-2];if (a[i] < 0 || a[i] > 1) return 0;}if (a[n+1] == 0) return 1;else return 0;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n;for (int i = 1; i <= n; i++) cin >> b[i];int ret = 0;ret += check1(); //a[1]不放地雷ret += check2(); //a[1]放地雷cout << ret << endl;return 0;
}

⼆进制枚举

⼆进制枚举:⽤⼀个数⼆进制表⽰中的0/1 表⽰两种状态,从⽽达到枚举各种情况。

  • 利⽤⼆进制枚举时,会⽤到⼀些位运算的知识。
  • ⼆进制枚举的⽅式也可以⽤递归实现。
78. 子集 - 力扣(LeetCode)

枚举1 ~1<<n之间所有的数,每⼀个数的⼆进制中1的位置可以表⽰数组中对应位置选上该元素。那么1 ~1<<n就可以枚举出原数组中所有的⼦集。
根据枚举的每⼀个状态,选出原数组中对应的元素,然后存在结果数组中

class Solution {
public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> ret;int n = nums.size();//枚举所有状态for (int st = 0; st < (1 << n); st++){//根据st的状态,还原出要选的数vector<int> tmp; //存子集for (int i = 0; i < n; i++){if ((st >> i) & 1) tmp.push_back(nums[i]);}ret.push_back(tmp);}return ret;}
};
P10449 费解的开关 - 洛谷

在这个「拉灯游戏」中我们可以得到「三个性质」:

  1. 每⼀个开关「最多只会被按⼀次」。因为按两次及以上是没有意义的,只会让按的次数增多;
  2. 按每⼀个开关的「先后顺序」不会影响最后的结果。可以想象,当所有开关按的⽅式确定之后,每⼀个开关被改变的「次数」也就被确定了,也就是说不管你先按谁后按谁,改变的次数是固定的,那么结果就是固定的;
  3. 如果「确定了第⼀⾏」的按法,后续⾏的按法就也固定下来了。因为第⼀⾏的按法固定之后,第⼆⾏的按法需要把第⼀⾏「全部点亮」;当第⼆⾏的按法确定之后,第三⾏的按法需要把第⼆⾏「全部点亮」…,依次类推,后续⾏的按法就都确定下来了。
核心思路

有了这三个性质,那么我们的核⼼思路就是:

  1. 暴⼒「枚举」第⼀⾏的所有按法;
  2. 然后根据第⼀⾏的按法,计算出当前⾏以及下⼀⾏被按之后的结果;
  3. 根据上⼀⾏被按了之后的状态,确定当前⾏的按法,然后重复2 操作;
  4. 最后判断最后⼀⾏是否全部都亮。
    接下来考虑每⼀步如何「优美」的实现。为了⽅便起⻅,我们读取原数据的时候把所有的1当成0,把所有的0当成1,这样题⽬要求的全亮,就变成全灭,后续各种操作都⾮常舒服。
实现
  1. 读取数据时,我们直接⽤「⼆进制」存每⼀⾏的状态:
    ⽐如:00101 ,对应的就是5。这样我们就可以⽤「位运算」快速实现⼀些操作,⽅便之处会在后续算法原理中体现;
  2. 枚举第⼀⾏所有的按法:
    枚举1~ (1<<5)-1之间所有的数,如果⼆进制表⽰中第i位是1就表⽰第⼀⾏的第i位被按;
  3. 如何计算某个状态下,⼀共按了多少次:
    相当于计算⼆进制表⽰中11 的个数,常规操作
  4. 如何优美的根据当前⾏的按法push,得到当前⾏a[i]以及下⼀⾏a[i+1]被按push了之后的状态:
    a. 当前⾏:被按的位置会影响「当前位置」以及「左右两个位置」的状态,如果状态是0会被变
    成1,如果状态是1会被变成0,不正好是x^1之后的结果么?⼜因为会改变「当前位置」以及「左右两个位置」,所以a[i]的最终状态就是:
a[i] = a[i] ^ push ^ (push<<1) ^ (push>>1);

其中,push<<1有可能会让第5位变成1,这⼀位是⼀个「⾮法」的位置,有可能影响后续判断,我们要「截断⾼位」:(push<<1)^((1<<5)-1);
最终:

a[i] = a[i] ^ push ^ (push>>1) ^ ((push << 1) ^ ((1 << 5)-1));

b. 下⼀⾏:当前⾏的push只会对下⼀⾏「对应的位置」做修改:a[i + 1] = a[i + 1]^ push; 发现没,使⽤「⼆进制」表⽰存状态之后,改变的时候只⽤使⽤「位运算」即可,不然还要写for循环来改变每⼀个位置的值
5. 求出当前⾏被按了之后的结果,如何求出下⼀⾏的按法:
巨简单,当前⾏怎么亮,下⼀⾏就怎么按,这样就可以把当前⾏亮的位置暗灭:nextpush = a[i] ,注意此时的a[i]是被按了之后的状态。
6. 判断最后⼀⾏是否全灭:
判断a[4] == 0即可,我们开头「反着存储」的优势就体现出来了

#include <bits/stdc++.h>
using namespace std;const int N = 10;
int n = 5;
int a[N]; //用二进制存储状态
int t[N];// 计算1的个数
int calc(int x)
{int cnt = 0;while (x){cnt++;x &= x - 1;}return cnt;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);int T; cin >> T;while (T--){memset(a, 0, sizeof a);for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){char ch; cin >> ch;if (ch == '0') a[i] |= 1 << j;}}int ret = 0x3f3f3f3f; //统计所有合法的按法的最小值//枚举第一行所有方法for (int st = 0; st < (1 << n); st++){memcpy(t, a, sizeof a);int push = st;//记录当前行的按法int cnt = 0; //统计次数//依次计算后续行的结果for (int i = 0; i < n; i++){cnt += calc(push);//修改当前行被按的结果t[i] = t[i] ^ push ^ (push << 1) ^ (push >> 1);t[i] &= (1 << n) - 1;  //清空影响//修改下一行t[i+1] ^= push;//下一行按法push = t[i];}if (t[n-1] == 0) ret = min(ret, cnt);}if (ret > 6) cout << -1 << endl;else cout << ret << endl;}return 0;
}
UVA11464 Even Parity - 洛谷
  1. 每⼀个0 如果变成1 ,只会「变⼀次」;
  2. 当第⼀⾏的「最终状态」确定之后,第⼆⾏的「最终状态」也会确定。所以我们可以「暴⼒枚举」第⼀⾏的最终状态,在这个最终状态「合法」的前提下,「递推」出来第⼆⾏的状态,「以此类推」下去。
    考虑⼀下⼏个问题:
  3. 如何枚举第⼀⾏所有的「最终状态」st :
    枚举1 ∼ (1 << n) - 1 之间所有的数,「每⼀个数」就是第⼀⾏的最终状态;
  4. 由于本题只能0 变1 ,所以我们还要「判断」每⼀⾏的最终状态y 「是否合法」:
    很简单,⽐较初始状态x以及最终状态y中「⼆进制表⽰的每⼀位」,如果是0变1 ,就是
    「合法」操作,计数;如果是1变0 ,「⾮法」操作,直接「跳出本次循环」,枚举第⼀⾏的下
    ⼀个状态;
  5. 当前⾏的最终状态a[i]确定之后,如何「递推」下⼀⾏的最终状态a[i + 1]
    规则是当前位置「上下左右」1的个数之和是「偶数」,根据「异或」运算「⽆进位相加」的特
    性,正好就是上下左右位置「异或」的结果是0 。那么下⼀⾏对应位置的状态就是「当前⾏右移⼀位」与「当前⾏左移⼀位」与「上⼀⾏对应位置」异或的结果:
a[i + 1] = (a[i] >> 1) ^ (a[i] << 1) ^ a[i - 1];  

其中a[i] << 1 会造成不合法的位置是1的情况,注意「⾼位截断」:

(a[i] << 1) & ((1 << n) - 1)
#include <iostream>
#include <cstring>
using namespace std;
const int N = 20;
int n;
int a[N]; // ⽤⼆进制存储状态
int t[N]; // 备份
// 判断 x->y 是否合法
// 返回 -1,表⽰不合法
// 其余的数,表⽰合法,并且表⽰ 0->1 的次数
int calc(int x, int y)
{int sum = 0;for(int i = 0; i < n; i++){if(((x >> i) & 1) == 0 && ((y >> i) & 1) == 1) sum++;if(((x >> i) & 1) == 1 && ((y >> i) & 1) == 0) return -1;}return sum;
}
int solve()
{int ret = 0x3f3f3f3f; // 记录最⼩的改变次数// 枚举第⼀⾏的最终状态for(int st = 0; st < (1 << n); st++){memcpy(t, a, sizeof a);int change = st;int cnt = 0; // 统计 0->1 的次数bool flag = 1;for(int i = 1; i <= n; i++){// 先判断 change 是否合法int c = calc(t[i], change);if(c == -1){flag = 0;break;}cnt += c; // 累加次数// 当前⾏的最终状态t[i] = change;// 计算下⼀⾏的最终状态change = t[i - 1] ^ (t[i] << 1) ^ (t[i] >> 1);change &= (1 << n) - 1;}if(flag) ret = min(ret, cnt);}if(ret == 0x3f3f3f3f) return -1;else return ret;
}
int main()
{int T; cin >> T;for(int k = 1; k <= T; k++){// 多组测试数据,记得清空memset(a, 0, sizeof a);cin >> n;for(int i = 1; i <= n; i++) // 避免越界访问{for(int j = 0; j < n; j++){int x; cin >> x;if(x) a[i] |= 1 << j;}}printf("Case %d: %d\n", k, solve());}return 0;
}

相关文章:

NO.58十六届蓝桥杯备战|基础算法-枚举|普通枚举|二进制枚举|铺地毯|回文日期|扫雷|子集|费解的开关|Even Parity(C++)

枚举 顾名思义&#xff0c;就是把所有情况全都罗列出来&#xff0c;然后找出符合题⽬要求的那⼀个。因此&#xff0c;枚举是⼀种纯暴⼒的算法。 ⼀般情况下&#xff0c;枚举策略都是会超时的。此时要先根据题⽬的数据范围来判断暴⼒枚举是否可以通过。 使⽤枚举策略时&#xf…...

postman测试调用WebService时不会自动添加命名空间

这两天在学习调用webservice&#xff0c;发现Postman直接调用时&#xff0c;返回 no namesapce on "myservice" element. you must send a soap message 找了很久&#xff0c;才明白&#xff0c;Postman 不会自动为请求添加命名空间&#xff0c;得手动在请求的 XML 数…...

【已解决】Git:为什么 .gitignore 不生效?如何停止跟踪已提交文件并阻止推送?

你可能遇到的问题 你已经提交了某个文件夹&#xff08;如 dataset&#xff09;到 Git 仓库&#xff0c;之后修改了它&#xff0c;但发现修改内容被 Git 持续跟踪&#xff0c;无法通过 .gitignore 忽略。尝试在 .gitignore 中添加规则后&#xff0c;修改的文件仍然显示为"…...

WebRTC协议全面教程:原理、应用与优化指南

一、WebRTC协议概述 **WebRTC&#xff08;Web Real-Time Communication&#xff09;**是一种开源的实时通信协议&#xff0c;支持浏览器和移动应用直接进行音频、视频及数据传输&#xff0c;无需插件或第三方软件。其核心特性包括&#xff1a; P2P传输&#xff1a;点对点直连…...

深度学习框架对比评测:TensorFlow、PyTorch、PaddlePaddle与MXNet的技术演进与应用实践

本文针对当前主流的四大深度学习框架&#xff08;TensorFlow 2.15、PyTorch 2.2、PaddlePaddle 2.5、MXNet 1.9&#xff09;&#xff0c;从架构设计、开发效率、训练性能、部署能力及生态系统等维度展开系统性评测。通过图像分类、自然语言处理、强化学习三类典型任务的基准测试…...

Ethernet(以太网)详解

一、Ethernet的定义与核心特性 以太网&#xff08;Ethernet&#xff09;是一种 基于IEEE 802.3标准的局域网&#xff08;LAN&#xff09;技术&#xff0c;用于设备间通过有线或光纤介质进行数据通信。其核心特性包括&#xff1a; 标准化&#xff1a;遵循IEEE 802.3系列协议&am…...

Python正则表达式(二)

目录 六、re.findall()函数和分组 1、0/1分组情况 2、多分组情况 七、或“|”的用法 1、作用域 2、用法 八、贪婪模式和懒惰模式 1、量词的贪婪模式 2、量词的懒惰模式 九、匹配对象 1、相关函数 六、re.findall()函数和分组 1、0/1分组情况 在正则表达式中&#x…...

学习《JS数据结构与算法》

博主这些日子去实习所以断更了&#xff0c;现在回归想接着学习一下数据结构与算法&#xff0c;学校也有上这门课&#xff0c;但博主去实习很多课都没上&#xff0c;现在自己看书学习一下&#xff0c;每天记录一下自己学习进度规范一下自己&#xff0c;需要这本书的可以私聊博主…...

图解AUTOSAR_SWS_FlashDriver

AUTOSAR Flash驱动(FLS)模块详解 AUTOSAR基础软件存储抽象层组件详细解析 目录 1. 概述 1.1. Flash驱动模块简介1.2. 功能和作用2. 架构设计 2.1. 模块架构2.2. API接口设计2.3. 状态机设计2.4. 异步操作时序2.5. 配置结构2.6. 任务处理流程3. 总结 3.1. 设计优势3.2. 应用场景…...

哪吒汽车:一边熬夜蹦迪,一边找药投医

两年前&#xff0c;威马CEO沈晖发了个短视频&#xff0c;内容是“活下去&#xff0c;像牲口一样活下去”。 如今最能体会沈晖当时心情的&#xff0c;估计就是方运舟了。 作为哪吒汽车创始人兼董事长&#xff0c;他连续多次被限高&#xff0c;为了让哪吒汽车活下去&#xff0c…...

Linux一步部署主DNS服务器

​ #!/bin/bash #部署DHCP服务 #userli 20250319if [ "$USER" ! "root" ]then echo"错误&#xff1a;非root用户&#xff0c;权限不足&#xff01;"exit 0fi#防火墙与高级权限 systemctl stop firewalld && systemctl disable firewalld…...

使用django的DRF业务逻辑应该放在序列化器类还是模型类

在 Django REST Framework (DRF) 中&#xff0c;序列化器和模型类有明确的职责划分。虽然序列化器在反序列化时负责接收、验证和转换数据&#xff0c;但模型类仍是整个系统的核心&#xff0c;承担更底层的职责。以下是详细解析&#xff1a; 一、序列化器 vs 模型类&#xff1a…...

图片隐私清理工具

图片隐私清理助手&#xff1a;一键清除图片敏感信息的神器 在数字时代&#xff0c;我们每天都会拍摄和分享大量图片&#xff0c;但你是否注意过这些图片中可能暗藏隐私信息&#xff1f;相机的GPS定位、拍摄参数等EXIF数据&#xff0c;都可能在不经意间泄露你的隐私。今天介绍的…...

【UE5】摄像机晃动

目录 效果 步骤 一、游戏中晃动视角 二、Sequence中晃动视角 效果 步骤 一、游戏中晃动视角 1. 新建一个蓝图&#xff0c;父类选择“CameraShakeBase” 这里命名为“BP_MyCameraShake” 打开“BP_MyCameraShake”&#xff0c;根晃动模式这里设置为“Perlin噪点摄像机晃…...

类和对象—继承(1)

目录 1、继承1.1、继承的概念1.2、继承的语法 2、子类访问父类成员2.1、子类中访问父类的成员变量2.2、子类中访问父类的成员方法2.3、super 关键字 3、子类构造方法 1、继承 在 Java 中&#xff0c;类对现实中的实体进行描述&#xff0c;而类实例化的对象用来表示现实中的实体…...

CCF CSP 第33次(2024.03)(2_相似度计算_C++)(字符串中字母大小写转换+哈希集合)

CCF CSP 第33次&#xff08;2024.03&#xff09;&#xff08;2_相似度计算_C&#xff09; 题目背景&#xff1a;题目描述&#xff1a;输入格式&#xff1a;输出格式&#xff1a;样例1输入&#xff1a;样例1输出&#xff1a;样例1解释&#xff1a;样例2输入&#xff1a;样例2输出…...

试试智能体工作流,自动化搞定运维故障排查

APO 1.5.0版本全新推出的智能体工作流功能&#xff0c;让运维经验不再零散&#xff01;只需将日常的运维操作和故障排查经验转化为标准化流程&#xff0c;就能一键复用&#xff0c;效率翻倍&#xff0c;从此告别重复劳动&#xff0c;把时间留给更有价值的创新工作。更贴心的是&…...

Linux应用:线程基础

线程介绍 进程是程序在操作系统里的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的一个执行单元&#xff0c;是 CPU 调度和分派的基本单位。一个进程可以包含多个线程&#xff0c;这些线程共享进程的资源&#xff0c;如内存空间、文…...

ngx_conf_parse

配置文件 #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }http {#include mime.types;#default_type appli…...

要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查(CRUD)项目

文章目录 要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查&#xff08;CRUD&#xff09;项目1. 创建Spring Boot项目2.项目配置2.1 依赖yml配置数据库表配置 3.代码实现3.1 实体类3.2 数据访问层3.3 服务层3.4 控制层3.5 Thymeleaf模板 要创建一…...

解决Cubemx生产的 .ioc文件不能外部打开的方法

正常来说&#xff0c;cubemx生成的文件会有图标 但是当图标白色的时候&#xff0c;无法通过直接点击这个文件进入cubemx 1.首先检查java环境是不是装的JAVA8&#xff0c;如果是的话进行第二步操作&#xff1b; 2.重新安装一次cubemx&#xff0c;在安装的时候选择为我安装&…...

在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服务器,并实现远程联机,详细教程

Linux 部署 MineCraft 服务器 详细教程&#xff08;丐版&#xff0c;无需云服务器&#xff09; 一、虚拟机 Ubuntu 部署二、下载 Minecraft 服务端三、安装 JRE 21四、安装 MCS manager 面板五、搭建服务器六、本地测试连接七、下载樱花&#xff0c;实现内网穿透&#xff0c;邀…...

Transformer | 一文了解:缩放、批量、多头、掩码、交叉注意力机制(Attention)

源自: AINLPer&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2025-3-27 更多&#xff1a;>>>>专注大模型/AIGC、学术前沿的知识分享&#xff01; 引言 之前的文章&#xff1a;2万字长文&#xff01;一文了解…...

原型验证后客户推翻原有需求,如何止损

原型验证后客户推翻原有需求时止损的有效方法包括&#xff1a;迅速评估影响范围、立即开展沟通确认、调整项目计划和资源配置、更新变更管理流程、协商成本分担机制。其中&#xff0c;迅速评估影响范围是关键&#xff0c;项目团队必须立即明确此次变更的具体影响&#xff0c;包…...

六、小白学JAVA-类和对象

1、什么是类和对象 人类---类&#xff1a;走路、说话、学习 人---对象&#xff1a;具体到某个人&#xff0c;就是对象&#xff0c;走路、说话、学习&#xff0c;每个人都是独特的人。 public class Person {String name;public void walk() {System.out.println("我会走…...

CMLINK APN 手动设置

以下是针对 CMLINK 的 APN设置 的详细指南&#xff0c;基于常见配置需求&#xff1a; CMLINK APN 手动设置参数 参数项值说明名称CMLINK (自定义)任意命名&#xff08;如 CMLINK、CM Internet 等&#xff09;&#xff0c;建议使用ASCII字符&#xff0c;无特殊符号。APNcm.com …...

深入探索 Python 中的 asyncio:异步编程的利器

在当今的软件开发中&#xff0c;异步编程已经成为了提高程序性能和响应能力的重要手段之一。Python 作为一种广泛使用的编程语言&#xff0c;提供了强大的异步编程支持&#xff0c;而 asyncio 库则是其中的核心。本文将深入探讨 asyncio 的基本概念、使用方法以及一些高级特性&…...

STM32硬件IIC与OLED使用

OLED屏幕介绍 OLED即有机发光管(Organic Light-Emitting Diode,OLED)。OLED显示技术具有自发光、广视角、几乎无穷高的对比度、较低功耗、极高反应速度、可用于绕曲性面板、使用温度范围广、构造及制程简单等有点&#xff0c;被认为是下一代的平面显示屏新兴应用技术 OLED显示…...

基于Spring Boot的电动车智能充电服务平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

十、JavaScript对象

一、对象 创建对象的方法有三种&#xff1a;字面量、new、构造函数。 1.利用字面量创建对象 花括号{}里面包含了表达这个具体事物&#xff08;对象&#xff09;的属性和方法 // 1.利用对象字面量创建对象{}// var obj {}; // 创建了一个空的对象var obj {uname: black,ag…...