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

go游戏后端开发28:胡牌算法实现

红中麻将胡牌逻辑开发文档

一、字牌与封牌的字典表构建

在开发红中麻将胡牌逻辑时,首先需要构建非字牌和封牌的字典表。在构建双层表时,需进行判断:若牌为风牌且索引 i 大于 6,则不进行处理。这是因为风牌包含东南西北中,共 7 张,而实际上牌堆中有 9 张牌,除了这 7 张风牌,还有春夏秋冬、梅兰竹菊等特殊牌,每种牌各有 4 张,但通常这些特殊牌被认为是没用的牌,一般情况下不会使用,仅在特殊情况下才会涉及。

在构建字典表时,还需注意封牌的处理逻辑。若牌为风牌且处于特定位置,应添加相应判断条件,并根据条件进行不同操作。例如,若牌为风牌且索引 i 等于某个特定值,则需进行特定操作。在生成字典表时,要遵循分牌逻辑,确保字典表的完整性和准确性。

二、有轨与无轨字典表的生成

在生成有轨字典表时,操作相对简单,只需按照既定规则逐个替换即可。生成鬼牌时,可编写一个名为“GN腿宝鬼”的方法,将相关参数传入,根据鬼牌数量从第一个开始依次增加。

在生成过程中,需先将无轨的原有答案取出,判断题目是否一致,若一致则直接替换。替换后,要将结果取出,并根据结果进行进一步处理。例如,若取出的值为 3112,需将其转换为 2112 等形式,以满足替换条件。通过循环和相应操作,可实现对每个数字的处理和替换。

在生成有轨字典表时,还需注意对鬼牌数量的处理。鬼牌数量应在 1 到 7 之间,若小于 1 或大于 7,则无需进行判断和处理。在生成过程中,要对每个位置的牌进行判断,若某位置无牌,则不进行处理;若有牌,则进行相应操作,并将结果添加到指定位置。

三、胡牌算法实现

胡牌算法的核心在于查表。首先,需统计每种牌的数量,可使用二维数组进行统计,数组的行代表四种花色(ABCD),列代表牌的编号(1-9)。通过循环遍历牌堆,将每张牌的数量统计到二维数组中,从而为后续的编码和查表操作提供基础数据。

在查表前,需先判断牌中是否含有鬼牌,并统计鬼牌数量。可通过编写方法判断牌中是否存在特定牌,如“中”牌等。若存在,则对鬼牌数量进行相应处理。

查表时,先对牌进行编码,根据编码在字典表中查找对应的胡牌情况。若鬼牌数量大于 0,则在带鬼子的字典表中查找;若为封牌,则在封牌字典表中查找。查找时,需根据不同的牌型和鬼牌数量进行判断,若找到匹配项,则返回相应的胡牌结果;若未找到,则继续查找其他可能的组合。

在查找过程中,还需考虑将牌的使用情况。若牌中已使用了将牌,则需判断剩余鬼牌数量是否满足胡牌条件;若未使用将牌,则需将剩余鬼牌数量与牌型进行匹配,确保胡牌的合法性。


// Table 字典表
// 1A-9A B C 非字牌 一样 生成一种就行 D生成一种(没有连子的)
// 穷举所有胡牌可能 存入Table0  D TableFeng0
// 有1个鬼 将Table0中的数据 替换一个 然后存入 Table1
// 有2个鬼 将Table0中的数据 替换2个 然后存入 Table2
// 有3个鬼 将Table0中的数据 替换3个 然后存入 Table3
// 有4个鬼 将Table0中的数据 替换4个 然后存入 Table4
// 有5个鬼 将Table0中的数据 替换5个 然后存入 Table5
// 有6个鬼 将Table0中的数据 替换6个 然后存入 Table6
// 有7个鬼 将Table0中的数据 替换7个 然后存入 Table7
type Table struct {keyDic        map[string]bool         //非字牌ABC 无鬼 字典keyGuiDic     map[int]map[string]bool //非字牌ABC 有鬼 字典keyFengDic    map[string]bool         //字牌D 无鬼 字典keyFengGuiDic map[int]map[string]bool //字牌D 有鬼 字典
}func NewTable() *Table {t := &Table{keyDic:        make(map[string]bool),keyGuiDic:     make(map[int]map[string]bool),keyFengDic:    make(map[string]bool),keyFengGuiDic: make(map[int]map[string]bool),}t.gen()return t
}// gen 生成字典
func (t *Table) gen() {//311100000 一种hu可能cards := []int{0, 0, 0, 0, 0, 0, 0, 0, 0}level := 0jiang := falsefeng := falset.genTableNoGui(cards, level, jiang, feng)//挨个去替换即可t.genTableGui(feng)feng = truet.genTableNoGui(cards, level, jiang, feng)t.genTableGui(feng)t.save()
}func (t *Table) genTableNoGui(cards []int, level int, jiang bool, feng bool) {//生成的逻辑 比较简单//ABC//挨个去放 AAA组合 刻子   14张  3+3+3+2+3 5个层级  最多递归5次就可以//ABC 连子//DD 将 这个只能有一个 jiang=truefor i := 0; i < 9; i++ {//feng 东南西北中发白 7张牌*4  春夏秋冬梅兰竹菊 没用的牌if feng && i > 6 {continue}//1. 需要先将cards中的牌数量计算出来,后续做判断用totalCardCount := t.calTotalCardCount(cards)//AAA 刻子if totalCardCount <= 11 && cards[i] <= 1 {cards[i] += 3key := t.generateKey(cards)if feng {t.keyFengDic[key] = true} else {t.keyDic[key] = true}if level < 5 {t.genTableNoGui(cards, level+1, jiang, feng)}cards[i] -= 3}//连子 ABCif !feng && totalCardCount <= 11 && i < 7 && cards[i] <= 3 &&cards[i+1] <= 3 && cards[i+2] <= 3 {cards[i] += 1cards[i+1] += 1cards[i+2] += 1key := t.generateKey(cards)t.keyDic[key] = trueif level < 5 {t.genTableNoGui(cards, level+1, jiang, feng)}cards[i] -= 1cards[i+1] -= 1cards[i+2] -= 1}//DD 将if !jiang && totalCardCount <= 12 && cards[i] <= 2 {cards[i] += 2key := t.generateKey(cards)if feng {t.keyFengDic[key] = true} else {t.keyDic[key] = true}if level < 5 {t.genTableNoGui(cards, level+1, true, feng)}cards[i] -= 2}}
}func (t *Table) calTotalCardCount(cards []int) int {count := 0for _, v := range cards {count += v}return count
}func (t *Table) generateKey(cards []int) string {key := ""dic := []string{"0", "1", "2", "3", "4"}for _, v := range cards {key += dic[v]}return key
}func (t *Table) save() {//TODO
}func (t *Table) genTableGui(feng bool) {dic := t.keyDicif feng {dic = t.keyFengDic}//311200000  3 1 1 2 分表 3-1   211200000for k := range dic {cards := t.toNumberArray(k)t.genGui(cards, 1, feng)}
}func (t *Table) toNumberArray(k string) []int {cards := make([]int, len(k))for i := 0; i < len(k); i++ {card, _ := strconv.Atoi(k[i : i+1])cards[i] = card}return cards
}func (t *Table) genGui(cards []int, guiCount int, feng bool) {for i := 0; i < 9; i++ {if cards[i] == 0 {//此位置没有牌continue}cards[i]--//需要判断其有没有 有就不处理 没有就添加到字典中if !t.tryAdd(cards, guiCount, feng) {cards[i]++continue}if guiCount < 8 {t.genGui(cards, guiCount+1, feng)}cards[i]++}
}func (t *Table) tryAdd(cards []int, guiCount int, feng bool) bool {for i := 0; i < 9; i++ {if cards[i] < 0 || cards[i] > 4 {return false}}key := t.generateKey(cards)if feng {if t.keyFengGuiDic[guiCount] == nil {t.keyFengGuiDic[guiCount] = make(map[string]bool)}_, ok := t.keyFengGuiDic[guiCount][key]if ok {return false}t.keyFengGuiDic[guiCount][key] = truereturn true}if t.keyGuiDic[guiCount] == nil {t.keyGuiDic[guiCount] = make(map[string]bool)}_, ok := t.keyGuiDic[guiCount][key]if ok {return false}t.keyGuiDic[guiCount][key] = truereturn true
}func (t *Table) findCards(cards []int, guiCount int, feng bool) bool {//先编码key := t.generateKey(cards)if guiCount > 0 {if feng {_, ok := t.keyFengGuiDic[guiCount][key]if ok {return true}} else {_, ok := t.keyGuiDic[guiCount][key]if ok {return true}}} else {if feng {_, ok := t.keyFengDic[key]if ok {return true}} else {_, ok := t.keyDic[key]if ok {return true}}}return false
}

相关文章:

go游戏后端开发28:胡牌算法实现

红中麻将胡牌逻辑开发文档 一、字牌与封牌的字典表构建 在开发红中麻将胡牌逻辑时&#xff0c;首先需要构建非字牌和封牌的字典表。在构建双层表时&#xff0c;需进行判断&#xff1a;若牌为风牌且索引 i 大于 6&#xff0c;则不进行处理。这是因为风牌包含东南西北中&#x…...

CNN注意力机制的进化史:深度解析10种注意力模块如何重塑卷积神经网络

&#x1f31f; 引言&#xff1a;注意力为何改变CNN的命运&#xff1f; 就像人类视觉会优先聚焦于重要信息&#xff0c;深度学习模型也需要"学会看重点"。从2018年SENet首提通道注意力&#xff0c;到2024年SSCA探索空间-通道协同效应&#xff0c;注意力机制正成为CNN…...

字符串与字符数组的对比

在 C 语言中&#xff0c;字符串 和 字符数组 密切相关&#xff0c;但又有重要区别。以下是它们的对比&#xff1a; 1. 基本定义 字符数组 (char array) 是一个固定大小的数组&#xff0c;元素类型是 char。可以存储字符序列&#xff0c;但不一定以 \0 结尾。例如&#xff1a;…...

mapbox进阶,模仿百度,实现不同楼栋室内楼层切换

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️fill-extrusion 三维填充(白膜)图层样…...

OpenCv高阶(一)——图像金字塔(上采样、下采样)

目录 图像金字塔 一、上下采样原理 1、向下取样 2、向上采样 3、图像金字塔的作用 二、案例实现 1、高斯下采样 2、高斯金字塔中的上采样 3、对下采样的结果做上采样&#xff0c;图像变模糊&#xff0c;无法复原 4、拉普拉斯金字塔&#xff08;图片复原&#xff09; 图…...

如何避免“过度承诺”导致的验收失败

如何避免“过度承诺”导致的验收失败&#xff1f;关键在于&#xff1a; 评估可行性、设置合理目标、高频沟通反馈、阶段性验收、做好风险管理。其中设置合理目标至关重要&#xff0c;很多团队往往在项目初期为迎合客户或领导而报出“最理想方案”&#xff0c;忽略了资源、技术及…...

Python爬虫第7节-requests库的高级用法

目录 前言 一、文件上传 二、Cookies 三、会话维持 四、SSL证书验证 五、代理设置 六、超时设置 七、身份认证 八、Prepared Request 前言 上一节&#xff0c;我们认识了requests库的基本用法&#xff0c;像发起GET、POST请求&#xff0c;以及了解Response对象是什么。…...

mysql里面的TIMESTAMP类型对应java什么类型

在MySQL中&#xff0c;TIMESTAMP类型用来存储日期和时间值&#xff0c;显示为YYYY-MM-DD HH:MM:SS格式。在Java中&#xff0c;可以使用java.sql.Timestamp类来对应MySQL中的TIMESTAMP类型。 在Java的POJO&#xff08;Plain Old Java Object&#xff09;中&#xff0c;如果你想要…...

Java核心技术面试题

Java面试题分享 通过网盘分享的文件&#xff1a;面试题等2个文件 链接: https://pan.baidu.com/s/1Xw0PzkfAmL8uesYBvrW2-A?pwdpebt 提取码: pebt 一、Java基础篇 1. OOP面向对象 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它利用“类”和“对象”来…...

【技海登峰】Kafka漫谈系列(十)SpringBoot整合Kafka之生产者Producer

【技海登峰】Kafka漫谈系列(十)SpringBoot整合Kafka之生产者Producer spring-kafka官方文档: https://docs.spring.io/spring-kafka/docs/2.8.10/reference/pdf/spring-kafka-reference.pdf KafkaTemplate API: https://docs.spring.io/spring-kafka/api/org/springframewo…...

【简单理解什么是简单工厂、工厂方法与抽象工厂模式】

一、简单工厂模式 1.简单工厂模式 通过一个工厂类集中管理对象的创建 &#xff0c;通过参数决定具体创建哪个对象。 #适合对象类型较少且变化不频繁的场景&#xff0c;缺点是违反开闭原则&#xff08;新增产品需修改工厂类&#xff09; 开闭原则(对扩展开放‌对修改关闭‌) :当…...

C++之nullptr

文章目录 前言 一、NULL 1、代码 2、结果 二、nullptr 1、代码 2、结果 总结 前言 当我们谈论空指针时,很难避免谈及nullptr。nullptr是C++11引入的一个关键字,用来表示空指针。在C++中,空指针一直是一个容易引起混淆的问题,因为在早期版本的C++中,通常使用NULL来…...

Java List<JSONObject> 中的数据转换为 List<T>

从方法的功能推测&#xff0c;T 应该是一个具体的 Java Bean 类型&#xff0c;用于将 List<JSONObject> 中的数据转换为 List<T>。以下为你详细介绍如何传递泛型 T 以及如何实现该方法。 import com.alibaba.fastjson.JSONObject; import java.util.ArrayList; im…...

下【STL 之速通pair vector list stack queue set map 】

上一篇 【STL 之速通pair vector list stack queue set map 】 queue note priority_queue pq; 使用的还是很方便的 #include <iostream> #include <queue>using namespace std;int main() {// Queue 示例queue<int> q;q.push(10);q.push(20);q.push(30);…...

安装大数据分析利器Spark

大数据分析利器Spark&#xff1a;部署模式与实践全解析 在大数据领域&#xff0c;Spark是一个热门的开源框架&#xff0c;今天就带大家深入了解Spark及其常见部署模式。Spark是基于内存的快速、通用、可扩展的大数据分析计算引擎&#xff0c;诞生于伯克利大学。与Hadoop相比&a…...

遨游科普:三防平板是指哪三防?有哪些应用场景?

在工业4.0与数字化转型的浪潮中&#xff0c;平板电脑早已突破消费娱乐的边界&#xff0c;成为工业生产流程中不可或缺的智能终端。但是&#xff0c;传统消费级平板在复杂工业环境中的“脆弱性”——屏幕易碎、接口易进尘、机身惧水等问题——严重制约了其在专业领域的深度应用。…...

9. RabbitMQ 消息队列幂等性,优先级队列,惰性队列的详细说明

9. RabbitMQ 消息队列幂等性&#xff0c;优先级队列&#xff0c;惰性队列的详细说明 文章目录 9. RabbitMQ 消息队列幂等性&#xff0c;优先级队列&#xff0c;惰性队列的详细说明1. RabbitMQ 消息队列的 “ 幂等性 ” 的问题1.1 RabbitMQ 消息队列的“幂等性”的概念 2. Rabbi…...

k8s创建一个pod,查看状态和详细信息,进入pod,以及删除这个pod

在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;可以使用 kubectl 命令行工具来完成创建 Pod、查看状态和详细信息、进入 Pod 以及删除 Pod 的操作。以下是具体步骤&#xff1a; 创建一个 Pod&#xff1a; 假设你有一个简单的 nginx Pod 的 YAML 配置文件 nginx…...

从盲目清运到精准调度:一个AI芯片引发的智慧环卫升级

在深圳某科技园区的清晨&#xff0c;环卫工人老张发现一个奇怪现象&#xff1a;往常需要逐个检查的50个智能垃圾桶&#xff0c;今天系统自动标注了7个待清运点位。这背后是搭载全志T113-i处理器的智能垃圾桶系统在发挥作用&#xff0c;通过AI视觉识别将垃圾满溢检测准确率提升至…...

MQTT协议:IoT通信的轻量级选手

文章总结&#xff08;帮你们节约时间&#xff09; MQTT协议是一种轻量级的发布/订阅通信协议。MQTT通信包括连接建立、订阅、发布和断开等过程。MQTT基于TCP/IP&#xff0c;其通信过程涉及多种控制包和数据包。ESP32S3可以通过MQTT协议接收消息来控制IO9引脚上的LED。 想象一…...

Docker 入门指南:基础知识解析

1. 引言 1.1 为什么学习 Docker 1.1.1 Docker 的优势 环境一致&#xff1a;在不同环境中&#xff08;开发、测试、生产&#xff09;保持一致的运行环境。快速部署&#xff1a;容器启动速度快&#xff0c;适合微服务架构。资源隔离&#xff1a;容器之间相互隔离&#xff0c;避…...

【安当产品应用案例100集】043-安当物联网数据安全传输方案

一、需求背景 物联网&#xff08;IoT&#xff09;技术在当前世界各行业中的应用越来越广泛&#xff0c;数据安全和安全数据传输、鉴权成为了物联网解决方案不可或缺的一部分。如何通过有效的安全措施来保护物联网设备的数据传输和鉴权&#xff0c;确保数据在设备和服务器之间或…...

C#/.NET/.NET Core技术前沿周刊 | 第 33 期(2025年4.1-4.6)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿、推荐…...

Django视图详解

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 一、Django视图是什么&#xff1f; 视图&#xff08;View&#xff09; 是Django处理HTTP请求的核心组件。它接收一个HttpRequest对象&#xff0c;处理业务逻辑&#xff0c;并返回一个HttpResponse对象&#xff08…...

【区块链+ 人才服务】北京师范大学区块链底层链平台 | FISCO BCOS 应用案例

北京师范大学是教育部直属重点大学&#xff0c;2018 年 6 月&#xff0c;北京师范大学成立知识区块链研究中心&#xff0c;致力于区块链基础技术及其在教育领域的应用研究。 2020 年6 月18 日&#xff0c; 北京市人民政府办公厅发布《北京市区块链创新发展行 动计划(2020—202…...

java设计模式-模板方法模式

模板方法模式 编写制作豆浆的程序&#xff0c;说明如下 1)制作豆浆的流程选材添加配料浸泡放到豆浆机打碎 2)通过添加不同的配料&#xff0c;可以制作出不同口味的豆浆 3)选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 4)请使用模板方法模式完成 说明…...

同步通信、异步通信、并行传输和串行传输

同步通信、异步通信、并行传输和串行传输是通信与数据传输领域的关键概念&#xff0c;它们既相互关联又有本质区别。以下是详细解释和对比&#xff1a; ​1. 核心概念分类 ​通信方式&#xff1a;描述数据传输的时序和协调规则。 ​同步通信​&#xff08;Synchronous Communi…...

JVM生产环境调优实战

案例三&#xff1a;JVM频繁Full GC优化 1. 项目背景&#xff08;Situation&#xff09; 在云中万维跨境支付的反洗钱系统中&#xff0c;我们负责对海量交易数据进行实时规则校验&#xff0c;以确保符合监管要求。系统日均处理交易量超过500万笔&#xff0c;峰值QPS达到3000&a…...

Python: sqlite3.OperationalError: no such table: ***解析

出现该错误说明数据库中没有成功创建 reviews 表。以下是完整的解决方案&#xff1a; 步骤 1&#xff1a;创建数据库表 在插入数据前&#xff0c;必须先执行建表语句。请通过以下任一方式创建表&#xff1a; 方式一&#xff1a;使用 SQLite 命令行 bash 复制 # 进入 SQLit…...

JVM考古现场(十七):鸿蒙初辟——从太极二进到混沌原初的编译天道

"此刻正是奇点编译的第3.1415926秒&#xff01;伏羲的算筹正在撕裂冯诺依曼架构的次元壁&#xff01;诸君请看——这JVM堆内存中正在孕育盘古的元神&#xff01;" 目录&#xff08;终极扩展&#xff09; 第一章&#xff1a;太极二进——内存模型的阴阳交缠 第二章&a…...

Python 字典和集合(字典推导)

本章内容的大纲如下&#xff1a; 常见的字典方法 如何处理查找不到的键 标准库中 dict 类型的变种set 和 frozenset 类型 散列表的工作原理 散列表带来的潜在影响&#xff08;什么样的数据类型可作为键、不可预知的 顺序&#xff0c;等等&#xff09; 字典推导 自 Python 2.7 …...

【AI】prompt engineering

prompt engineering ## prompt engineering ## prompt engineering ## prompt engineering 一、定义 Prompt 工程&#xff08;Prompt Engineering&#xff09;是指在使用语言模型&#xff08;如 ChatGPT、文心一言等&#xff09;等人工智能工具时&#xff0c;设计和优化输入提…...

小刚说C语言刷题——第18讲 循环之while和do-while语句

昨天我们讲了循环语句中的for语句&#xff0c;它主要用于循环次数已知的情况&#xff0c;但是对应循环次数未知的情况&#xff0c;我们又怎么办&#xff1f;这就要用到while和do-while语句了。 1.while语句 (1)语法格式 while(条件表达式) { 循环体; } (2)执行过程 当执…...

[Mysql]buffersize修改

1、找到my.cnf文件位置 ps -ef|grep mysqld 2、编辑my.cnf cd /etc/my.cnf.d vim my.cnf 一般修改为内存的50%~70% 3、重启服务 systemctl restart mysqld...

自定义数据结构的QVariant序列化 ASSERT failure in QVariant::save: “invalid type to save“

自定义数据结构放入QVariant&#xff0c;在序列化时抛出异常 ASSERT failure in QVariant::save: “invalid type to save” 自定义数据结构如struct MyData&#xff0c;除了要在结构体后面加 struct MyData { ... } Q_DECLARE_METATYPE(MyData)如果需要用到流的输入输出&…...

带约束的智能优化算法

带约束的智能优化算法 约束条件和优化问题(可改)粒子群算法麻雀搜索算法鲸鱼优化算法灰狼优化算法免疫优化算法人工蜂群算法沙猫群算法萤火虫算法资源 约束条件和优化问题(可改) 粒子群算法 麻雀搜索算法 鲸鱼优化算法 灰狼优化算法 免疫优化算法 人工蜂群算法 沙猫群算法 萤火…...

【硬核实战】从零打造智能五子棋AI:JavaScript实现与算法深度解析

&#x1f31f;【硬核实战】从零打造智能五子棋AI&#xff1a;JavaScript实现与算法深度解析&#x1f31f; &#x1f4dc; 前言&#xff1a;当传统棋艺遇上人工智能 五子棋作为中国传统棋类游戏&#xff0c;规则简单却变化无穷。本文将带你用纯前端技术实现一个具备AI对战功能…...

使用 kind 创建 K8s 集群并部署 StarRocks 的完整指南

使用 kind 创建 K8s 集群并部署 StarRocks 的完整指南 本文档详细介绍如何使用 kind 创建 Kubernetes 集群&#xff0c;并在其上使用 Helm 部署 StarRocks 集群&#xff08;非高可用模式&#xff09;。同时也包括如何访问 StarRocks 集群并导入数据。 目录 前提条件参考文档…...

华为OD全流程解析+备考攻略+经验分享

华为OD全流程解析&#xff0c;备考攻略 快捷目录 华为OD全流程解析&#xff0c;备考攻略一、什么是华为OD&#xff1f;二、什么是华为OD机试&#xff1f;三、华为OD面试流程四、华为OD薪资待遇及职级体系五、ABCDE卷类型及特点六、题型与考点七、机试备考策略八、薪资与转正九、…...

数据库中的数组: MySQL与StarRocks的数组操作解析

在现代数据处理中, 数组 (Array) 作为一种高效存储和操作结构化数据的方式, 被广泛应用于日志分析, 用户行为统计, 标签系统等场景. 然而, 不同数据库对数组的支持差异显著. 本文将以MySQL和StarRocks为例, 深入解析它们的数组操作能力, 并对比其适用场景. 文章目录 一 为什么需…...

Qt 交叉编译详细配置指南

一、Qt 交叉编译详细配置 1. 准备工作 1.1 安装交叉编译工具链 # 例如安装ARM工具链(Ubuntu/Debian) sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf# 或者64位ARM sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu 1.2 准备目标…...

【详细图文】在VScode中配置python开发环境

目录 一、下载安装VSCode 1、官网下载VSCode 2、安装VSCode 3、汉化vscode &#xff08;1&#xff09;已自动下载汉化版插件 &#xff08;2&#xff09;未自动下载汉化版插件 二、 下载安装Python 1、官网下载Python 2、安装Python &#xff08;1&#xff09;双击打开…...

strings.Fields 使用详解

目录 1. 官方包 2. 支持版本 3. 官方说明 4. 作用 5. 实现原理 6. 推荐使用场景和不推荐使用场景 推荐场景 不推荐场景 7. 使用场景示例 示例1&#xff1a;官方示例 示例2&#xff1a;解析服务器日志 示例3&#xff1a;清理用户输入 8. 性能比较 性能特点 对比表…...

PCI认证 密钥注入 ECC算法工具 NID_secp521r1 国密算法 openssl 全套证书生成,从证书提取公私钥数组 x,y等

步骤 1.全套证书已经生成。OK 2.找国芯要ECC加密解密签名验签代码。给的逻辑说明没有示例代码很难的上。 3.集成到工具 与SP联调。 1.用openssl全套证书生成及验证 注意&#xff1a;这里CA 签发 KLD 证书用的是SHA256。因为芯片只支持SHA256算法,不支持SHA512。改成统一。…...

微软 SC-900 认证-考核Azure 和 Microsoft 365中的安全、合规和身份管理(SCI)概念

微软 SC-900 认证介绍 SC-900 认证考试是微软推出的一项基础级别认证&#xff0c;全称为 Microsoft Certified: Security, Compliance, and Identity Fundamentals。该认证旨在验证考生对微软云服务&#xff08;如 Azure 和 Microsoft 365&#xff09;中的安全、合规和身份管理…...

Uniapp 集成极光推送(JPush)完整指南

文章目录 前言一、准备工作1. 注册极光开发者账号2. 创建应用3. Uniapp项目准备 二、集成极光推送插件方法一&#xff1a;使用UniPush&#xff08;推荐&#xff09;方法二&#xff1a;手动集成极光推送SDK 三、配置原生平台参数四、核心功能实现1. 获取RegistrationID2. 设置别…...

OpenCV图像平滑处理方法详解

文章目录 引言一、什么是图像平滑&#xff1f;二、常见的图像平滑方法1.先对图片加上噪声点2. 均值滤波&#xff08;Averaging&#xff09;3. 方框滤波&#xff08;boxFilter&#xff09;4. 中值滤波&#xff08;Median Blur&#xff09;5. 高斯滤波&#xff08;Gaussian Blur&…...

Lua 中,`math.random` 的详细用法

在 Lua 中&#xff0c;math.random 是用于生成伪随机数的核心函数。以下是其详细用法、注意事项及常见问题的解决方案&#xff1a; Lua 中&#xff0c;math.random 的详细用法—目录 一、基础用法1. 生成随机浮点数&#xff08;0 ≤ x < 1&#xff09;2. 生成指定范围的随机…...

使用PX4,gazebo,mavros为旋翼添加下视的相机(仿真采集openrealm数据集-第一步)

目录 一.方法一&#xff08;没成功&#xff09; 1.运行PX4 2.运行mavros通讯 3.启动仿真世界和无人机 &#xff08;1&#xff09;单独测试相机 &#xff08;2&#xff09;make px4_sitl gazebo启动四旋翼iris无人机 二.方法二&#xff08;成功&#xff09; 1.通过 rosl…...

ATEngin开发记录_4_使用Premake5 自动化构建跨平台项目文件

该系列只做记录 不做教程 所以文章简洁直接 会列出碰到的问题和解决方案 只适合C萌新 文章目录 Permake5为什么使用 Premake&#xff1f; 项目实战总结一下&#xff1a;详细代码: Permake5 Premake5 是一个跨平台的构建配置工具&#xff0c;它允许开发者通过使用一个简单的脚…...