算法
文章平均质量分 62
金创想
这个作者很懒,什么都没留下…
展开
-
有向无环图的拓扑排序——CSP-J1真题讲解
你看到 (1,2),(1,3),(2,4),(3,4)这样的数据,这是什么样的数据呢?下面就来做一下这道题,题中给出了4条有向边:(1,2),(1,3),(2,4),和(3,4),也就是4种单相思关系:1爱2,1爱3,2爱4,3爱4。考虑一个有向无环图,该图包括4条有向边:(1,2),(1,3),(2,4),和(3,4)。对于一个有向无环图,拓扑排序是将图的所有顶点排成一个线性序列,使得对于每一条有向边 (u,v),顶点 u 在序列中出现在顶点 v 的前面。所谓的图,就是一堆节点和边。原创 2024-11-03 17:38:28 · 467 阅读 · 0 评论 -
全排列的另一种生成方法:标记数组
此代码和之前给出的套路代码的递归函数的实际意义都是一样的,都是求数组a[]从下标x到下标n的全排列。而之前发的套路代码并无标记数组,而是采用交换不同位置的人的编号的方式,从而自然实现x之前(含x)位置的人就是已排好的,而x之后位置的人就是还没排的。此代码新增了一个标记数组b[i],专门用于标记编号为i的人是否已排列,1表示已排,0表示未排。每次在排第x个位置的人时,都要将所有人逐一过一遍,只排还没排过的人,已排过的就不再排。位置指的是要排列的人的位置,编号是人的代号(可以想象成人名)。int a[15];原创 2024-10-30 18:29:55 · 633 阅读 · 0 评论 -
穷举法和枚举法的区别
枚是个量词,相当于“个”,“枚举”从字面意思讲就是“一个一个地列举”,这个词稍有“故作高深”之嫌,不如“穷举”那么简明直观,也不含有全部穷尽的意思。这可能是因为“穷举”一词更直接地传达了该方法的核心思想,而且也更简明易懂。“穷”指“彻底、完全”,“举”指“列举”,“穷举”就是指列举所有可能,即列举和考虑所有可能的情况,直到找到满足条件的解。“枚举法”则强调对可能解的一个个的列举和检验。穷举法和枚举法实际上是同一种算法思想的不同叫法,它们的基本思想和实现方式都是相同的。原创 2024-10-30 15:23:55 · 321 阅读 · 0 评论 -
生成全排列的方法:递归、DFS、回溯进行曲
比如arr={1, 2, 3},backtrack(arr, 0, 2)就是求整个数组的全排列,而backtrack(arr, 1, 2)就是求最后2个元素的全排列,backtrack(arr, 2, 2)就是求最后1个元素的全排列。在运算过程中,通过每次将start递增1不断缩小问题的规模,当开始下标等于结束下标时,要排列的只剩下一个元素,答案显示易见,所以此时递归终止。与排列树有关的问题一般都要用到“回溯算法”(这很好理解,效率越高越好嘛),但这里为简化起见,咱们只生成完整的全排列,不加入约束条件。原创 2024-10-29 16:56:08 · 862 阅读 · 0 评论 -
穷举法的本质和特点
穷举法常用于解决“有没有”、“有多少”之类的问题。在使用穷举法时,关键在于尽可能地找出问题的最小范围,以减少循环次数,同时避免漏掉正确的解。然而,当数据量过大时,穷举法可能会导致运行时间显著增加,甚至崩溃。穷举法也称为枚举法或暴力破解法,是一种通过列举问题的所有可能解来找出符合特定条件的解的方法。它主要依赖于循环和判断结构,通过循环遍历所有可能的解,然后利用判断结构来确定哪些解是符合题目要求的。“穷”指“彻底、完全”,“举”指“列举”,“穷举”就是指列举所有可能。原创 2024-10-29 16:07:36 · 109 阅读 · 0 评论 -
哈夫曼编码——CSP-J1真题讲解
(2)现在没拼过的节点从小到大为:c:12、d:13、f1:14、e:16、f:45,最小的节点为c、d,拼成新节点f2,频率25。(3)现在没拼过的节点从小到大为:f1:14、e:16、f2:25、f:45,最小的节点为f1、e,拼成新节点f3,频率30。虽然编码不一样,但每个字符的编码长度确是一定的,即长度依次为:4、4、3、3、3、1,根据这个特点也可以快速确定答案为A。(4)现在没拼过的节点从小到大为:f2:25、f3:30、f:45,最小的节点为f2、f3,拼成新节点f4,频率55。原创 2024-09-15 19:43:50 · 1855 阅读 · 0 评论 -
好算法的特点
④高效性:算法应占用最少的CPU和内存,这一点通过时间复杂度和空间复杂度进行判定。①正确性:能正确处理各种输入(合法输入、非法输入、边界输入),输出合理的结果。③健壮性:算法应运行一致,对于相同的输入始终输出相同的结果。②可读性:算法描述清晰,方便阅读、理解。原创 2024-09-14 19:59:36 · 142 阅读 · 0 评论 -
判断奇偶数的小妙招
按位与(&)的运算规则是只有当两个对应二进制位都为1时,结果才为1,否则结果为0。1表示只有末位是1,前面都是0,所以不管一个二进制数有多少位,“&1”的结果必然只剩末位数。第①步没有必要先将这个数转化为二进制,因为不管你输入的数是几进制的,在计算机内部都是按二进制计算的。要取出二进制的末位,只需要用到一个简的位运算:用这个数“& 1”。如果末位为0,说明它“逢”的都是二,没有零头,即它一定能被2整除。首先咱们要知道一个知识点:偶数的二进制末位为0,奇数的二进制末位为1。①取要判断的数的二进制的末位。原创 2024-09-11 13:53:50 · 318 阅读 · 0 评论 -
算法选择思路
遇到问题时,如果不确定该如何高效地解决,可尝试分而治之或动态规划;如果认识到根本就没有高效的解决方案,可转而使用贪婪算法来得到近似答案。原创 2024-09-08 23:51:31 · 126 阅读 · 0 评论 -
算法导论翻译勘误:address concerns
而address有“解决”的意思,所以address concerns应译为“解决担忧”(有的翻译为“解决问题”,其实问题就是让人担忧的事)。这段中文翻译明显曲解了address和concern的意思,把address译为“涉及”,把concens译为“考虑”。说白了就是告诉读者,俺们的算法很实用,为了方便读者应用,书中不光介绍了算法,还同时提供了具体的算法实现及工程环节遇到问题的解决方案。在我们所讨论的算法中,多数都有着极大的实用价值。因此,我们在书中涉及了算法实现方面的考虑和其他工程方面的问题。原创 2024-09-03 16:48:01 · 424 阅读 · 0 评论 -
什么是高精度?
高精度计算其实也没那么神秘,无非就是单独存储各个位上的数字(通常使用数组),然后就像我们人工计算那样逐位计算,只不过这个过程中可能会用到某些高级算法来提高运算效率。高精度(High Precision)计算是指处理那些超出了标准数据类型(如整数、浮点数等)表示范围或精度限制的数值运算。对于浮点数来说,本身就存在精度不高的问题。当有更高的精度要求时(典型的就是金融领域),就得用到高精度计算。我们常用的数据类型(如int型)都是有能表示的数据范围的,超出了范围自然计算结果就会存在偏差。原创 2024-08-27 15:26:06 · 619 阅读 · 0 评论 -
种树问题——CSP-J1真题讲解
小明在某一天中依次有七个空闲时间段,他想要选出至少一个空闲时间段来练习唱歌,但他希望任意两个练习的时间段之间都有至少两个空闲的时间段让他休息。把这个问题转换为种树问题更形象一些:总共有7个坑,最少要种1颗树,每两颗树之间至少要有2个空坑,问有多少种种法?枚举第1颗树分别种在第1、2、3、4…位置时,第二颗树位置有几种可能,加起来就是种两颗树的方案。因为第1颗树种在第5坑上,不能满足与第2颗树间有两个坑的条件,所以不可能种在第5坑。综上,总共有7+10+1=18种方案,故选B。原创 2024-08-24 21:18:10 · 583 阅读 · 0 评论 -
高精度计算的特点——真题讲解
C.错误,高精度乘法的运算时间实际上与两个参与运算的整数的位数都有关。因为乘法运算需要逐位相乘,并累加结果,所以两个数的位数都会影响到运算的复杂度。这里也涉及到一个蒙答案的技巧,就是凡是带有绝对字样的选项就要注意了,它极有可能就是错的,因为凡事无绝对,比如此选项就有这样的词“只与”。B. 大整数除以小整数的处理的步骤可以是,将被除数和除数对齐,从左到右逐位尝试将除数乘以某个数,通过减法得到新的被除数,并累加商。C. 高精度乘法的运算时间只与参与运算的两个整数中长度较长者的位数有关。原创 2024-08-24 21:14:07 · 266 阅读 · 0 评论 -
如何识别GBK码是英文字母还是汉字?
英文字符用一个字节来表示(范围0-127,即ASCII码的范围);汉字用两个字节来表示,通常第一个字节是负数(在二进制表示中,最高位为1),而第二个字节可以是正数或负数。需要注意的是,虽然通过字节值的判定方法在大多数情况下是有效的,但仍然存在一些特殊情况,比如某些特殊的控制字符或符号可能不符合上述规则。在GBK编码中,英文字母和汉字可以通过其字节值的范围来区分。原创 2024-08-06 16:50:12 · 270 阅读 · 0 评论 -
“移动”问题的算法原则
像绘图、走笔、蛇形填数等问题都会涉及到移动,这类问题的移动原则:先判断,再移动。不要走一步后发现越界了再退回来。先判断,再移动,就能避免无谓的移动导致的后退操作。所以,在很多情况下,最好是在做一件事之前检查是不是可以做,而不要做完再后悔。因为“悔棋”往往比较麻烦。这和现实生活也很相像,我们总说做事要三思而行。原创 2024-05-21 16:09:18 · 130 阅读 · 0 评论 -
字符串的周期:每一期都有那么几位
首先依次遍历第1个周期内的k个字符s[i](i=0~k-1),然后按纵向扫描的方式让后面每个周期内的对应的字符都与第1个周期内的字符一一比较,但凡遇到一个不相等的(即s[i+n*k]!),就判定k不是s的周期,从而将判断是否为周期的标志变量flag置为0。本代码有三层循环,第一层是周期k的遍历,第二层是第一个周期内字符的遍历,第三层循环是以k为公差的等差数列j的遍历。题目明确说明以长度为k的字符串重复多次得到字符串s,则称s以k为周期,所以字符串的长度len必然是k的倍数,据此可跳过不满足此条件的k。原创 2024-05-20 18:25:10 · 1153 阅读 · 0 评论 -
统计数列中的数字出现次数
关于f[n+1][k]=f[n][k]+x的实现,老金最初也想用一个表达式实现,但是没有成功,只好退而求其次先用一个循环实现f[n+1][k]=f[n][k],不知道有没有高手有更好的方法,还望指点一二。更高效的做法是一次性从1-10000整个遍历一次,针对每个n,分别求出0-9出现的次数,然后把这些数据都存储到数组中。这时候就需要用到二维数组f[n][k]统计数次,n表示前n个整数,k表示0-9。显然有f[n+1][k]=f[n][k]+x(x是k在整数n+1中出现的次数)如想进一步了解详见“原创 2024-05-18 11:55:05 · 807 阅读 · 0 评论 -
化学式的分子量计算——字符转数字
就是数字结束时,或者说是遇到下一个字母时。比如C12,可以先将字符转化为对应的数字(字符的ASCII码值-48),然后用1*10+2算出这个两位数字的大小,最后再将1。代码中再次用数组W[256]实现了查找表,这样可以通过将字母设为数组的下标,元素值设为原子量的值,从而快速获取字母对应的原子量。无数字时代表只有一个原子,因此可以设原子数n的默认值为1,当有数字时,计算数字并更新n。b. 计数时,如果n=-1,说明其前一位是个字母,此位数字是第一个数字,据此将n的初始值置为0,以便后续使用“连乘加法”计数。原创 2024-05-13 18:10:32 · 1239 阅读 · 0 评论 -
scanf留下的那一片云彩
注意,因为要返回自加后的值,此时就需要用++cnt,不能用cnt++(关于二者的区别参见“找不到北的i++”一文https://blog.csdn.net/jjmhx/article/details/136995419)。思路就是对输入串的字符进行遍历,如果遇到“O”就cnt++,如果遇到“X”就将cnt重置为0,然后每次将cnt加到sum中即可。老金想着秀一下“编技”,打一开始就想用getchar读取字符,这样就用不着数组了,没想到输出了意想不到的结果。②累加器sum,用于计算串的得分。原创 2024-05-11 18:12:02 · 1380 阅读 · 0 评论 -
程序找茬:统计字符个数问题
所以写不写都是一样,但不写的话一般会被认为对代码清晰性有影响(其实也影响不了啥清晰性,说白了就是大家都加,你不加你就是异类,让人看了心生违和感)。因此,if(s[i] == 1) 是错误的,应改为:if(s[i] == '1')。将计算字符串长度的函数strlen(s)写在循环中,会导致函数的重复调用,即每进行一次循环条件判断,都要重新计算字符串s的长度,显然这样会造成效率低下。我们在后续编程时应注意:如果函数的返回值是确定的,不要将其放在循环中,而应预先将其值存入变量。不过即便不影响运行,还是加上为好。原创 2024-05-10 17:29:05 · 534 阅读 · 0 评论 -
使用数组的必要条件
每输入一个数后,只能计算出当前输入所有数的平均值,而公式中的平均值是输入完成后所有数的平均值,所以“数据值-平均值”的值与以后输入的数有关,无法在每输入一个数更新此值,因此需要数组。假设输入只能读一遍。每输入一个数,只需要将其与max、smax比较即可算出新的max、smax,与以前输入的数无关,所以可以不用数组。可以在每次循环时更新4个变量的值:最大值、最小值、数的和、数的个数,这些值都只与原值和最近一次输入的数有关,所以可不用数组。输入数的个数只与原个数和最近一次输入的数有关,因此可以不用数组。原创 2024-05-09 18:00:58 · 460 阅读 · 0 评论 -
截取字符串的3种方法
注:格式化说明符%.*s表示输出*个字符,*的值由后面的变量n指定,这样表示就可以输出不固定的字符个数。完整形式为%m.ns,表示打印字符宽度为m,字符个数为n,如printf("%3.1s\n",s)会输出两个空格1个H。如果我们从大量的名人名言中随机截取片段,然后将它们重新组合成全新的句子,在有人工智能算法的加持下,就可能产生一些非常好玩的句子。也就是说,当n<m时,前面补空格,当n>m时,会正常输出n个字符(不会被截断)。:指向目标字符串的指针,即你要将源字符串复制到的位置。一、截取字符串的实现。原创 2024-05-06 21:41:01 · 10147 阅读 · 0 评论 -
环状串的字典序
只不过本题只是找出最小字典序,是排序的简化版,其算法本质上就像"求n个元素中的最小值"一样,只要拿其中1个与其它每个元素进行比较,一直取其中的最小值即可。环状串的核心词是“串”,本质上还是字符串,只不过是环形的,因此比较的对象是字符串。一般地,对于两个字符串,从第一个字符开始比较,当某一个位置的字符不同时,该位置字符较小的串,字典序较小(例如,abc比bcd小);老金想到的方法是先拿最小的字符A与串中的每一位比较,如果找到相等的就说明是最小字母,如果没找到就再依次拿C、G、T继续找。原创 2024-04-29 17:25:53 · 873 阅读 · 0 评论 -
“生成元”问题——穷举生成“查找表”
本题的新知识点就是用程序生成一个“查找表”,方法是一次性枚举100000内的所有正整数m,它肯定是“m加上m的各个数字之和(即y)”的一个生成元,所以可以用数组ans[]建立一个查找表,取ans [y]的值为最的小m,即ans[y]的值为y的最小生成元,最后查表即可。给出n(1≤n≤100000),求最小生成元。例如,n=216,121,2005时的解分别为198,0,1979。建立查找表的好处就是只需要完整地遍历一次,以后在数据范围内求任何数的最小生成元都能通过查找表快速查找,几乎不需要任何计算。原创 2024-04-25 22:40:00 · 279 阅读 · 0 评论 -
“猜数字”问题的巧转换
从样例中能看出统计A时是不去重的,但看不出统计B时是不是去重的,从代码中能看出是不去重的。对于每个数字(1~9),设其在答案序列中出现的次数为c1,在猜测序列中出现的次数为c2,则min(c1,c2)就是总配成的对数。这个问题如果这样描述就简明多了:对猜测序列与答案序列相同的数字进行配对,位置相同的优先配对,统计配成的对数。或者这个问题也可以转化为连线问题,猜测序列与答案序列相同的数字进行连线,位置相同的优先连线,每个数字只能连一次线,A指连成的竖线数,B指连成的斜线数。②找到的数不能是已配过对的数。原创 2024-04-24 17:30:13 · 656 阅读 · 0 评论 -
判断回文串和镜像串:巧妙利用ASCII码的连续性
字符长度len分奇数、偶数两种情况,奇数可表示为len=2n+1,偶数可表示为len=2n,它们要判断到的位数分别为n+1、n,用(len+1)/2一个表达式就正好可以求出正确的判断位数,而不用预先判断字符是奇数个还是偶数个。首先,它是一个数组,其次,数组中的元素都是指针,最后,这些指针指向的都是字符。2.本代码的一个巧妙用法是,利用了“连续字母、数字的ASCII码值也是连续的”这一特点,直接实现了字符与下标的对应关系,从而提高了查找效率(避免了使用循环查找字符位置,详见后面老金的代码)。原创 2024-04-19 20:15:23 · 1468 阅读 · 0 评论 -
利用常量数组解码的方法
该函数定义在 <string.h> 头文件中,strchr(s, c)的功能是在字符串s中查找字符c,如果找到,返回指向首次出现位置的指针。注意,它返回的是指向位置的指针,而不是位置的索引(数组下标)。1.读取函数的选择:如果每输入一个字符,都能通过某种规则直接求出要输出的字符(也就是说输出与输入的单个字符有关,与输入的单词、短语、句子无关),这种情况下用读取单个字符的函数getchar输入是理想的方法。严格来说,常量数组的元素均为常量,是不应被改变的,所以定义时应在类型名前加上const。原创 2024-04-18 17:19:27 · 721 阅读 · 0 评论 -
将一个字符轮流替换为不同字符
其中getchar的作用是读入下一个字符。当发现双引号时利用一个值来回从1、0间切换的标志变量q,将双引号轮流替换为TeX式的左、右双引号。条件判断部分中的双引号是一个字符,因此用两个单引号包裹;替换后的双引号实际上是两个字符,所以应看成字符串,用双引号包裹,输出时也要按字符串的格式输出,即用%s。= EOF)这样的写法,这样能使代码显得更简洁,应将其视为模板记住。在TeX中,左双引号是“``”,右双引号是“''”。输入一篇包含双引号的文章,你的任务是把它转换成TeX的格式。2.字符和字符串的区别。原创 2024-04-16 17:22:39 · 438 阅读 · 0 评论 -
限定数字的“竖式”
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。此问题要求整个竖式出现的所有数字都包含于一个给定的数字集合中,因此解决问题的关键是判断一个数字是否存在于一串数字中,比如2在“2357”中存在,1则不存在。老金在match函数中利用了数字的ASCII码值比实际数字大48这个规律(比如数字0的ASCII码值为48),从而实现了int型与char型数字的比较。本来想输入直接用整数,不用字符串,但因为第一个数字可能为0,所以只好选择字符串的输入方式。原创 2024-04-15 17:15:21 · 451 阅读 · 0 评论 -
“蛇形填数”问题的三种解法
蛇形填数的三种解法,第一种简洁,第二种笨拙,第三种巧妙。原创 2024-04-14 22:06:33 · 1281 阅读 · 0 评论 -
定义在mian函数之外的数组的自动初始化
第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。输入n和k,输出开着的灯的编号。2.模拟开关灯的双层循环中的i表示第i个人,j表示第j盏灯,这就需要有一条if语句来判断是否要操作开关。其实根据题意可知,要操作的开关就是i的倍数,所以可以直接定义j为要操作开关的灯的编号,这样就不用增加if语句了。问题看似复杂,但有了数组这把利刃,解决起来非常容易,只需要用a[i]表示第i盏灯是否开着即可。原创 2024-04-12 20:07:06 · 400 阅读 · 0 评论 -
给我一点点,还你满屏爱!
老金反思:如果有人问,浮点数有没有误差,我肯定能秒回有。但当我看到一个浮点数,首先想到的只是一个数学中的小数,而没有第一时间想到它有误差。下面的程序运行结果是什么?=”运算符表示“不相等”。很不幸,老金又中招了。运行前不以为然,运行后肝肠寸断!当我看到“不要凭主观感觉回答”的提示,我没有在意。刘汝佳《算法竞赛入门经典》第二章 思考题2。我以为只会加100个0.1。验,不要凭主观感觉回答。浮点数有误差咋能忘记?原创 2024-04-10 20:29:42 · 403 阅读 · 0 评论 -
数字排列的方法
9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。num[i]都赋值为1,再判断num[1]到num[9]的值,如果有值为0就说明该数字没有出现过。如果有数字出现次数大于1,必然有其他数字没出现,所以②与①是等价的。(2)数的避重:每生成一个数,都去与之前生成的所有数逐一比较是否相等,相等就跳过,不相等就再生成下一个数。就像之前说的,任一数字的出现次数不等于1,必然会导致有数字没出现。③分离成a、b、c、d、e、f、g、h、i,用于下一步判重。原创 2024-04-09 22:04:58 · 842 阅读 · 0 评论 -
动态输出n位小数——满满都是坑!
输入变量n,让你将一个数保留n位小数,看似简单的题目,却是深坑重重。原创 2024-04-08 18:46:31 · 1179 阅读 · 0 评论 -
隐藏在计算过程中的数据超限
(2)输出格式问题:输出格式要与样例严格一致,如Case和数字之间、冒号与输出值之间有且只有一个空格。,因此代码如果写成sum += 1.0/(i*i),大数相乘就会导致数据超限。(1)数据类型转换:输入的n、m为整数,而输出的结果为小数,需要转换数据类型,所以sum += 1.0/i/i中的1.0不能写成1。输入包含多组数据,结束标记为n=m=0。=n的形式不够简明,它其实等价于n。(3)数据超限问题:估计这就是题中所指的陷阱。(2)从n到m的遍历不用引入第3个变量,直接用n自加即可。原创 2024-04-07 10:11:11 · 377 阅读 · 0 评论 -
倒三角形的两种输出方法
思路是先求最大项,即第一行要输出的“#”数量(也就是等并数列的最后1项2n-1),以它为基准,其后每一项输出“#”的数量比前一项减2,输出的空格是(最大#数量-当前行#数量)/2。输出的三角形本质上是一个等差数列,关键是找到最后一个数与n的关系。首项为1,公差为2,显然第n项等于2n-1。只不过,这个等差数列要倒序输出。从输出的图形可以看出,每行输出的空格数是递增1的,由此可以利用累加器cnt++输出空格;“#”的输出数量则利用等差数列求第n项的公式求出。输入正整数n≤20,输出一个n层的倒三角形。原创 2024-04-06 21:11:59 · 457 阅读 · 0 评论 -
“韩信点兵”问题的数学真经
有一部数学真经叫《孙子算经》,产生了一个定理叫“中国剩余定理”,也叫“孙子定理”原创 2024-04-06 16:38:56 · 2155 阅读 · 0 评论 -
不堪大用的pow
求x的y次幂的库函数pow(x,y),当x、y都是整数时,会产生计算误差吗?原创 2024-04-04 18:05:15 · 820 阅读 · 0 评论 -
“多组数据”题的注意事项,天杀的“鲁棒性”
在题目要求输入“多组数据”时,应该注意什么?对计算机术语“鲁棒性”的评论。原创 2024-04-03 17:04:33 · 1202 阅读 · 0 评论 -
条形图、柱状图的绘制方法
这个代码的实现还是很巧妙的,这里的i可视为纵坐标,从最大数依次递减,a[j]表示第j个柱状图的数据,所以当a[j]大于等于i时,就输出星号。第一行输入一个整数n表示数据个数,第二行输入n个整数,用空格隔开。n和输入的数都不超过20。样例中的柱状图属于水平柱状图,一般叫“条形图”,输出这种形式的柱状图还是比较容易的。一般我们说的柱状图都是指垂直柱状图,相比水平的条形图就要难一些了。1.条形图(水平柱状图)2.柱状图(垂直柱状图)原创 2024-03-31 22:35:54 · 377 阅读 · 0 评论