- 博客(369)
- 收藏
- 关注

原创 数据分析编程 - 从入门到精通
在当今这个数据驱动的时代,数据分析已成为各行各业不可或缺的核心能力。从商业决策到科学研究,从金融预测到医疗健康,数据中蕴藏的洞见正在重塑我们的世界。然而,面对海量数据和复杂分析需求,传统的数据处理工具已显得力不从心,编程能力正逐渐成为数据分析师的必备技能。
2025-08-20 13:58:58
388

原创 DQL 超维分析
而且情况复杂时这个表可能要被重复关联,比如查询北京号码打给上海号码的通话记录,这个表就要被关联两次,这个表还会有维表也会被复制多次,如果维表还有维表…针对这个特性,将关联运算进行了分类,在此基础上发明了 DQL(Dimensional Query Language)一种基于维度的查询语言,从根本上解决 SQL 处理关联问题面临的困境,进而为 BI/ 灵活查询提供服务。而 SQL 对关联运算(JOIN)的定义很简单,两个表关联时,给出对应的关联字段就可以了,除此之外没有更多的信息和约定。
2025-08-01 15:11:34
619

原创 SPL轻量级文件存储提速查询实践
摘要:针对传统数据库在分析计算中的性能瓶颈,提出使用轻量级esProc SPL列存文件存储历史数据,结合其强大计算能力提升查询性能。该方案无需复杂集群,可直接嵌入应用,并提供了系列实践方法解决典型性能问题(如COUNT DISTINCT、外键关联等)。文中详细说明了测试环境配置、数据准备和SPL连接MySQL的示例代码,为突破数据库查询瓶颈提供了实用解决方案。
2025-07-15 14:18:55
457

原创 SPL 轻量级多源混算实践
摘要:本文介绍了使用esProc SPL实现多源数据混合计算的技术方案。针对当前异构数据源混合计算的技术难题,SPL通过统一数据对象转换和轻量化设计,提供了比传统逻辑数据仓库更灵活的解决方案。文章详细说明了SPL的原生连接器(支持RDB、本地文件等)和外部连接器(支持MongoDB、Kafka等)的架构,并规划了7个实践案例,涵盖从基础查询到跨库JOIN等复杂场景。环境准备部分提供了SPL、MySQL和MongoDB的安装指引,以及配套数据文件的下载链接。该方案特别强调SPL的语法简洁性和嵌入应用的能力,使
2025-07-14 16:50:38
534
原创 1. 准备工作---数据分析编程 - 从入门到精通
SPL 中可以在单元格里展现 =[A1:B4] 这样的数据集合,且该数据集合是有次序的,上图红框里的 Index 列就是数据的序号,在 SPL 中将这样有序的数据集合称为。在 SPL 的网格界面中,每个单元格的代码和计算结果可以同时呈现。SPL 的网格式编程重新定义了数据处理的体验,将编程的精确性与电子表格的直观性完美结合,为您提供了一种更高效、更可控的数据计算解决方案。:在网格中,每个单元格右侧会直接显示该单元格的计算结果,包括标量值、表格数据或图形输出,可以一目了然地掌握每个计算步骤的输出状态。
2025-08-21 14:36:48
594
原创 编程实现--当年销售额占到一半的前 n 个客户
将合同表按客户分组,算出每个客户的总金额并按其降序排列,而后算出总销售额的一半值,最后扫描这个表,途中不断累积销售额,直至达到一半销售额,之前的客户就是“大客户”了。A5先定义累计销售额a的初始值为0,half为全部客户销售总额的一半,然后对A4的结果查找,同时累计销售总额,直至累计总额刚好超过全部总和的一半。某年内按销售额排名的客户,达到一半销售额的前 n 个客户称为该年的“大客户”,请列出 1998 年该企业的大客户名单。A3做外键关联,将合同表的客户字段替换成客户记录,以便于查找客户的名称。
2025-08-19 15:31:29
298
原创 用编程---征婚匹配
Romeo(罗密欧)是一个 NS GSOH M Veronian(不抽烟,生活在维罗纳,很有幽默感的男性)。根据Juliet(朱丽叶)的WLTM(Would like to meet)条件判断,Romeo 适合吗?SPL中,用A.pos(B)!=null可以判断在两个序列中判断A是否包含B中的所有成员。A1读出每个人的个性特征,A2读出他们的需求条件。请找出所有符合 Juliet 的要求的征婚者。
2025-08-18 15:17:44
350
原创 编程练习---邮费计算
A3在订单数据中增加邮费字段,设置时先根据COST判断是否达到优惠金额,设置对应的优惠邮费(本例中免费);否则用segp在邮费标准中找到WEIGHT所在的区间,并取得对应的邮费完成设定,由于使用的区间是左开右闭区间,因此添加了@r选项。例如,第一条记录表示,COST字段取值在 300 与 1000000 之间的时候,邮费为 0(免费付运);某 B2C 网站需要计算订单的邮寄费用,大部分情况下,邮费由包裹的总重量决定,但是,当订单的价格超过 300 美元时,提供免费付运。A1读出邮费标准,B1读出订单数据。
2025-08-15 15:33:50
379
原创 编程实现---条形码检查和校验 (#60)
取出 13 位字符串的前 12 位数字,将每个奇数位的数字相加得到 S1,将每个偶数位的数字相加得到 S2,用 S1 减去 S2,然后和 10 取余数,最后取绝对值,得到的数字应该等于第 13 位条码,如果不等则为错误的条形码。将给出的条形码的 13 位数字转化为序列,求出序列中前 12 位奇数位的数字之和后,再求出偶数位之和,将求得的两个数值做减法运算,所得的差对 10 求余后再取绝对值,最后判断所得的数值与条形码的最后一位数字是否相等。A1填入条形码,由于要求条形码为字符串,因此以'作为开头。
2025-08-14 15:53:07
286
原创 用编程---列出管理结构树
如果找到直属上级,则C5在员工表中找到领导者的姓名,并在B2的员工姓名前添加领导者姓名,并更新B2中的编号后,继续查找领导者的上级。A5循环计算每位员工的管理层信息,计算时用prior函数查找他的各级MGR,直到找不到为止,并取出他们的ENAME,此时得到的结果是从低级到高级的,因此需要用rvs函数将其倒序排列,用concat即可得到所需的层级关系串。排序后得到的结果和前一种方法是一致的。首先找出某一员工 A,通过关系表找到该员工对应的上级 B,再查找 B 的上级 C,找到之后在进行循环。
2025-08-13 14:27:38
909
原创 编程实现-万年历
C3中定义参数r来展示当前一行的日历的字串,在每月首日,需要根据它在一周中的位置,用填充字符填补前面的空位。w表示周几,初始值为1月1日对应的结果,s为用来对齐的填充字符,这里用空格,d定义日历中每天占用的字符数,这里设为6。循环十二个月,首先计算月标题和星期标题添加到万年历,然后循环月中的所有天,按周拼接日期,日期间隔为适当数量的空格,一周拼接结束把结果追加到万年历,然后继续下一周。显示时,需要选择空格和各个英文字母都同宽的等宽字体,如Courier,Consolas,宋体等,否则可能会不整齐。
2025-08-12 15:42:44
225
原创 模拟多重循环解决逻辑问题
在SPL中,to(n)可以取得1~n构成的序列,用其可以取得答案选择的题目及之前的所有答案,用A.pos(x)来判断其中是否存在其它选2(对应b)的;首先把所有问题答案置0,然后按顺序依次给每一个问题答案加1,再通过题目中要求对各个答案进行判断,如果答案不符合某个题目的要求,则答案再加1,直到符合为止。第9题的答案比较复杂,在判断时,在可能出现的题目总数0~10中,分别选出质数、阶乘数、平方数、立方数和5的倍数,再在C25中根据第9题的答案判断选择bcd这3个选项的总题数是否符合答案。
2025-08-11 15:35:22
717
原创 DQL 超维分析 - 5 集算器 DQL
集算器DQL提供了一种基于高性能列存文件(组表)的直接查询方案,相比依赖数据库的DQL能有效减轻数据库压力。使用流程包括:通过ETL工具将数据库表转为CTX组表文件,创建虚表定义后转换为DQL表,支持设置内存维表和索引优化。DQL语法与数据库DQL一致,但无需SQL翻译过程,可直接执行层次查询、外键关联等操作。部署需要特定JAR包,应用集成方式与数据库DQL相同。进阶功能包括汇总表透明化、分区表处理等。
2025-08-08 14:27:40
1003
原创 DQL 超维分析 - 4 应用集成
配置完成后就可以启动 DQL 服务(润乾报表 [安装根目录]\report\bin 下:startDQLSERVER.bat / startDQLSERVER.sh)。每个目录代表一个 DQL 服务,从应用角度可以将 DQL 服务看成逻辑数据库,如这里的 datalogic,目录名就是服务名称。然后部署 service 目录。service 目录是 DQL Server 的主文件目录,可包含多个 DQL 服务。应用集成 DQL(JDBC)就可以访问 DQL 服务,这里需要先部署 DQL 服务。
2025-08-07 14:45:44
372
原创 DQL 超维分析 - 3 生成 DQL 元数据
本文介绍了DQL元数据的生成过程。首先连接默认数据源,导入带有主外键的表结构;然后设置表主键和关联关系,为时间维度添加日、月、年三个假表,并将日期字段与假表关联;接着优化维度名称并添加层次函数,实现日期与城市维度的多粒度查询;最后发布元数据到WEB端,支持拖拽式查询。整个过程需要技术人员熟悉数据结构,通过完善的元数据建模实现灵活的数据查询分析。
2025-08-06 17:21:43
308
原创 DQL 超维分析 - 2 DQL 概念和语法
本文介绍了DQL(维度查询语言)的核心概念和语法特点。DQL以维度为核心,通过定义维度、维度层次和表间关系简化数据分析查询。关键内容包括:1) 维度作为数据观察角度,可设置不同层次粒度;2) 使用假表处理日期等特殊维度;3) 通过外键、同维表和主子表三种方式建立表间关系;4) 支持子表聚合查询和非标准函数调用。DQL语法比SQL更简洁,通过"一次建模"理念,用户只需定义维度关系即可实现复杂查询,无需每次编写多表关联。
2025-08-05 16:01:48
715
原创 DQL 超维分析 - 1 DQL 原理
把外键字段理解成维表的记录后,维表的字段就相当于外键的属性了,department.manager 即是“所属部门的经理”,而这个字段在 department 表中仍然是个外键,那么它对应的维表记录字段可以继续理解为它的属性,也就会有 department.manager.nationality,即“所属部门的经理的国籍”。这是很常规的表结构设计。同维表之间是对称的,两个表的地位相同。还要注意的是,说过外键关联是不对称的,即事实表和维表是不对等的,只能基于事实表去找维表字段,而不会有倒过来的情况。
2025-08-04 16:37:59
889
原创 第六篇 - 枚举字段条件过滤:SPL轻量级文件存储提速查询实践
枚举字段的取值是有限几种值,针对枚举字段 f 的过滤条件写成 f =v1 or f=v2 or…=v1 and f!数据库要用 f 与 n 个值比较计算,数据表较大的时候比较次数会很多,性能就会比较差,而且 n 越大性能越差。对订单表(图中间)过滤,常规计算是用 employee_num 去 employee 表(图左边)对应位置取 name,然后和 [“name10”,“name101”] 比较。SPL 则用序号去对位序列(图右边)中取对应位置的布尔值,是 true 表示满足条件,否则就是不满足。
2025-07-29 14:57:03
936
原创 第五篇 - 大主子表关联时的 EXISTS:SPL轻量级文件存储提速查询实践
摘要:文章介绍了如何利用esProc SPL技术优化主子表EXISTS计算性能,通过有序归并算法显著提升查询效率。以订单系统为例,对比了传统SQL与SPL在三种场景下的性能差异:产品订单统计(41秒→0.2秒)、异常订单检测(16秒→0.2秒)和复杂条件分组(超5分钟→0.9秒)。重点阐述了SPL通过预排序、有序归并和分组优化的技术原理,并提供了实践练习建议,展示了在处理大数据量主子表关联时的性能优势。(149字)
2025-07-28 14:51:17
843
原创 第四篇 - 大主子表关联:SPL轻量级文件存储提速查询实践
【摘要】本文介绍了利用有序归并算法优化主键关联查询性能的方法。针对订单表与明细表的大数据量关联场景,通过预先将数据按主键有序存储,esProc SPL的joinx函数可实现高效的归并关联,相比传统SQL性能提升显著。实验显示,在分组统计、条件过滤等典型查询中,SPL的执行时间从SQL的20-40秒降至0.6-1.5秒。关键步骤包括:将数据导出为有序CTX文件,声明分段键保证数据完整性,使用cursor@m多线程读取配合joinx归并关联。该方法特别适合处理一对多关系的大表关联,同时支持有序去重等复杂计算。
2025-07-21 16:04:55
740
原创 第三篇 - 外键维表的关联---轻量级文件存储提速查询
SPL重新定义SQL关联运算,将其分为外键关联和主键关联两种类型,通过不同函数实现。外键关联指普通字段与主键关联,主键关联则是主键间的连接。SPL通过预加载维表、预关联外键等技术显著提升性能。测试显示,在订单统计场景中,SPL执行时间(0.3-0.4秒)远快于MySQL(20-22秒)。该方法适用于需要频繁进行外键关联查询的场景,建议读者思考如何将序号关联技术应用于熟悉的数据库系统。
2025-07-17 14:54:00
612
原创 第二篇 COUNT DISTINCT---SPL轻量级文件存储提速查询
如果先将数据按照去重字段排序,计算有序去重就会简单很多,只要在遍历过程中,把与上一条不相同的字段保存下来,并把计数值加 1 即可,不需要保持结果集,更不必做外存缓存。if(event_type==1,user_id)):count1,条件成立,得到 user_id,不成立得到 null。A2 中游标的 group 函数,不带任何选项,默认是建立分组子集的,A3 中的 ~ 就表示当前分组子集。这里自动加了 p 选项。而且,只是计数不做分组汇总的话,可以不建立按照 user_id 分组的子集,性能更好。
2025-07-16 16:08:08
555
原创 第一篇 - 常规过滤及分组汇总---轻量级文件存储提速查询
A5 则对过滤后的结果做分组,语法形式和 SQL 不同,但仔细看会发现涉及的要素都是一样的:分号前的部分是分组键,相当于 SQL 的 GROUP BY 部分,分号后是聚合值,相当于 SQL 中 SELECT 中的聚合运算。A3 中的游标取数时,先读出 orders.ctx 的 order_date,shipper_id,shipper_fee 字段用于计算条件,如果条件不成立就放弃读取其他字段,如 employee_id。注意,游标只取出需要的字段,可以减少生成的对象,并减少内存占用,提高性能。
2025-07-15 14:35:13
805
原创 统计单词的出现率
上面的代码同样也可以直接写为一句代码:=file("MobyDick.txt").cursor@i().(~.words()).conj().groups(~:Word;熟练之后,可以用一句代码找到出现频率最高的单词及其出现次数:=file("MobyDick.txt").read().words().groups(~:Word;现有一篇符合上述特征的文档MobyDick.txt,请找出其中一共出现过多少个不同的单词,以及每个单词的次数,并找出出现频率最高的单词。读取文档内容,将文档内容拆成单词序列。
2025-07-11 11:37:59
352
原创 轻量级文件存储提速查询实践
其中涉及的实例都是传统数据库很头疼的性能问题,比如 COUNT DISTINCT,外键 JOIN,大主子表关联(包括 EXISTS),枚举字段条件过滤(包括 IN)等,助您突破数据库查询性能瓶颈!实践使用的测试环境是 VMWARE 虚拟机,8 核 CPU,8G 内存,SSD 硬盘,操作系统是 Win11,MYSQL 版本是 8.0,esProc SPL 是标准版。传统交易(TP)数据库不擅长分析计算,而专业 OLAP 数据库又过于沉重,经常需要集群,不仅成本高昂,也会使系统架构变得更复杂。
2025-07-09 14:43:12
597
原创 如何轻松实现多源混算报表
而对于一些没那么常用的数据源,像 MongoDB、Kafka、ES 这些,SPL 基于数据源的原生接口进行了简单封装,以外部 Connector 的形式提供,用到时单独引入即可。如果结果集比较大,SPL 脚本可以直接返回游标,润乾报表提供了大报表功能可以直接基于游标分批呈现数据(具体参考论坛资料),因此可以满足任意数据源任意数据规模的报表查询。通过逻辑数仓能获得较强的实时性,但体系又过于沉重,大型机构的报表平台还可以,但为了日常应用中的报表而搭建逻辑数仓,就有点得不偿失了。接下来设计报表展现模板。
2025-07-08 10:49:57
705
原创 SPL量化课---第 3 章 复权数据
这句代码中join的参数较长,我们以分号为间隔分两部分来看,先看第分号前面的部分tdate, A6:tdate, close:close_f,第1个tdate是A8的关联字段,第2个tdate是A6的关联字段,close是A6里要拼接的字段表达式,:close_f表示将字段名设为close_f,因此分号前面这部分的代码就表示将A8的tdate和A6的tdate进行关联,并将A6中的字段close命名为close_f拼接到A8上。结果返回的是一个两层结构的数据,外层是序列,如左图可以看到数据被分为了3个组;
2025-07-02 16:43:47
971
原创 SPL量化课----第 2 章 理解 K 线数据
理论上讲,T和T@c是两个无关的不同函数,但这两个函数非常像,都是用来读取数据的,参数也一样,完成的功能虽然不完全相同,但也很类似。实际上在一个项目中通常会有很多个脚本,每次都要写一堆call或register有点麻烦,我们可以将一个项目中用到的所有脚本都登记到一个单独的脚本中,这样只要在每段程序开头执行这个脚本就可以了,避免了重复劳动。在SPL中我们用相同的名字来命名这两个函数,而用函数名后 @后面的字符来区分,好象一个函数有了不同的模式:没有 @c 时,T函数返回序表,有@c 时返回游标。
2025-07-01 14:56:46
916
原创 连续三天上涨达到 9.5% 的股票
A4将A3中记录按股票代码分组,由于前面已做了排序,这里用@o选项无需再次排序。A5在循环所有分组,在组内跨行计算涨跌率UP,首日涨跌率按0计。将记录按代码和日期排序,然后按股票代码分组,就得到了每支股票一个月来的价格表,这样就能轻易的算出每支股票每天的涨跌率,通过将涨跌率和标准涨幅比较即可知道涨幅是否达到标准,最后统计出连续三天涨幅达标的天数。A3在交易记录基础上,添加UP字段,准备用来存储收盘价的涨跌率,并将记录按照股票代码和交易日期排序,以便于分组以及利用相邻日期数据计算涨跌率。SPL是开源免费的,
2025-06-30 17:10:46
327
原创 Java 和 SQL 做数据运算哪个更快?
结构化数据的计算处理一直以 SQL 为主。不过随着技术的不断发展,现在经常为了满足扩展性的需要而使用 Java 来处理数据。这样可以显著降低数据库与应用的耦合性(数据库仅用于存储),整体架构更加灵活,应用扩展和维护都比较方便。而在大数据时代,计算性能又是避不开的话题,一项技术如果跑得太慢会把其他所有好处都抵消掉。那么,Java 和 SQL 做数据运算哪个更快呢?
2025-06-27 16:51:10
642
原创 SPL 报表开发:不依赖逻辑数仓的轻量级多数据源报表
有了这两种数据对象,就可以覆盖几乎所有的数据源了。与逻辑数仓的映射方式不同,SPL 支持并提倡使用数据源的原生语法实现数据访问和计算,如果数据源本身的计算能力不足,则可以使用 SPL 来补充,在后面实例中会具体看到。外部数据源种类繁多,也不是每种数据源都很常用,所以将这些连接器以外部库的形式提供会更为灵活,以后发现有新的数据源也可以及时补充而不影响现有的数据源。由于提供了统一数据对象,只要 SPL 能访问到,就都能混合计算,非常简单,这样报表就可以获得实时数据混合查询的能力,快速实现多源、T+0 报表。
2025-06-27 16:47:15
1017
原创 SPL量化课程---第 1 章 工具准备
CSV是一种很常见的文件格式,表示 Comma Separated Values,是一种纯文本文件,用于存储表格和电子表格信息。这里的每个格子都是一个变量,可以当变量名使用如 A1,B1,这样的好处就是不用起很多临时变量名了。并且格名还会自动变迁,例如下图,在首行新插入一行,格名就变为了 A2 和 B2。点击左上角新建菜单,界面左边会生成一个格子区,代码就写在格子里,一个格子一句代码,就像写 Excel 公式一样。再来看下如何用 SPL 读取文件,比如,有一支股票的交易数据文件,格式为 csv。
2025-06-26 16:18:34
262
原创 SPL 量化课程
当前市面上的量化交易课程存在一个根本性矛盾:课程设计者其实知道现有技术体系对初学者过于复杂,却又无力改变这一现状。专业量化交易使用的Python等编程语言和回测框架,原本是为专业人员设计的,需要数百甚至上千行代码才能实现基本功能。而课程设计者大多不具备开发简化工具的能力,只能在这些复杂系统的基础上进行"削足适履"式的教学。这种妥协导致了一个尴尬的结果:学员花费大量时间学习后,要么被困在编程语法细节中,要么只能理解抽象原理而无法实操。
2025-06-26 11:04:28
1434
原创 化于无形的 lambda 语法
SPL 继承了 SQL 的所有优势,且对各种形式的集合都可以使用化于无形的 lambda 语法,引入了 ~、# 等符号,进一步简化代码,而且适应面广且风格统一,是三者中最强的。在循环中,lambda 函数几乎总是用到集合的当前成员,SPL 把这个参数固化为 ~ 符号,这样就省去了参数的定义,从而把 lambda 写成简单表达式,继续保持将 lambda 化于无形的优点。对于集合的集合,就不能再使用对位运算了,采用 lambda 语法是 Python 最简单的写法,换其它方法,思路和代码都会变得更复杂。
2025-06-25 15:37:55
909
原创 SPL 比 SQL 更难了还是更容易?
SPL 作为专门用于结构化和半结构化数据的处理技术,在实际应用时经常能比 SQL 快几倍到几百倍,同时代码还会短很多,尤其在处理复杂计算时优势非常明显。用户在看到这些应用效果后对 SPL 往往很感兴趣,但又担心掌握起来太难,毕竟 SPL 的理念和语法都跟 SQL 有较多不同,这要求用户需要重新了解一些概念和学习新的语法,用户可能会心生疑虑。那么 SPL 的上手难度究竟如何呢?这里我们以 SQL 为起点讨论一下这个问题。
2025-06-24 16:51:54
942
原创 SPL 实践系列:跨库移植 SQL
SPL 支持的数据库类型和函数定义在发布包 esproc-bin.jar 中的字典文件 /com/scudata/dm/sql/function.xml 中。1+?1+INTERVAL?2,?1+CAST(?1,?FUNCTIONS 节点代表一个函数组,type 是函数组类型,FixParam 表示参数个数固定的函数组。FUNCTION 节点代表一个简单 SQL 函数,name 是函数名,paramcount 是参数个数,value 是翻译本函数时的默认值,空串时表示无需翻译。
2025-06-23 14:18:43
796
原创 SPL轻量级多源混合计算
经常要借助逻辑数据仓库,但基于SQL的逻辑数仓不仅能力有限,而且体系过于沉重,经常会比应用本身还复杂,只适合应用于大型场景中,并不适合众多日常的轻量多源混算场景。SPL因为具备丰富的多样性数据源支持,所有数据源接入后都会转换成统一数据对象(序表或游标),这就具备了天然混合计算的基础,不管何种数据源只要能访问到就能混合计算。对于最常见的RDB,SPL通过JDBC与数据库交互,能动态生成/拼接SQL,也可以为SQL传递参数,原来在Java等语言与SQL结合的场景都可以使用SPL来完成。
2025-06-19 13:54:53
765
原创 求出无限循环小数的循环节
用分子和分母求余,判断余数在前面的计算中是否出现过,如果余数没有出现过,说明循环节未出现,则把余数乘以 10 作为被除数,继续循环计算求余。如果余数出现过则结束循环,从上次出现相同余数的位置到这次出现相同余数的位置之间的商即为无限循环小数中的循环节。B2中存储循环过程中出现过的余数,这也是A2循环执行时的判断依据。C2计算下一个被除数,B3存储循环过程中出现过的商,并计算下一位的商存入。在SPL中可以用for x执行条件循环,在循环体中,用@表示当前格值,如B2相当于=B2|C1。C1用同余计算初始余数。
2025-06-18 17:04:12
325
原创 模拟随机发牌
B5计算牌的点数,用字符串中对应的一个字符表示,特别的,10用0表示。四个人打扑克,用一副扑克牌,抽掉大小王,剩余 52 张牌,洗牌后平分给四个人,每人 13 张,并按花色和点数整理。现在用 ♠,♥,♦,♣表示扑克牌花色,例如 ♠8 表示黑桃 8,♥K 表示红桃 K,请写一个程序实现发牌过程,输出 4 个序列。首先将 52 个数字使用随机数排序,将数分成 4 组,调用子程序,将当前数作为参数传入,在子程序中计算该数对应的牌,返回一张由花色和点数组成的牌,此过程即为发牌过程。
2025-06-17 16:18:21
426
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人