统计数字与字典序问题
- 格式:doc
- 大小:65.09 KB
- 文档页数:5
最优排序规则在日常生活和工作中,我们经常需要对一些事物进行排序,以便更好地进行管理和决策。
而选择一个合适的排序规则对于最终结果的准确性和有效性至关重要。
本文将探讨一些常见的最优排序规则,并分析它们的适用场景和优势。
一、字典序排序字典序排序是最常见的排序规则之一,它按照字母的顺序对字符串进行排序。
这种排序规则适用于需要按照字母顺序进行排序的场景,如英文单词的排序、联系人姓名的排序等。
字典序排序的优势在于简单易懂,方便快捷。
然而,它并不适用于数字排序或者复杂的数据结构排序。
二、数字排序数字排序是按照数值的大小对数字进行排序。
这种排序规则适用于需要按照大小顺序进行排序的场景,如成绩排名、价格排序等。
数字排序的优势在于可以直观地反映出数值的大小关系,便于比较和分析。
然而,数字排序也存在一些问题,比如当数字相同时,无法确定它们的顺序。
三、时间排序时间排序是按照时间的先后顺序对事件进行排序。
这种排序规则适用于需要按照事件发生的顺序进行排序的场景,如日程安排、新闻报道等。
时间排序的优势在于可以清晰地反映出事件的发生顺序,便于追溯和分析。
然而,时间排序也存在一些问题,比如当事件发生时间相同时,无法确定它们的顺序。
四、重要性排序重要性排序是按照事物的重要程度对其进行排序。
这种排序规则适用于需要按照重要性进行排序的场景,如任务优先级的排序、问题解决的排序等。
重要性排序的优势在于可以把注意力集中在最重要的事物上,提高工作效率和决策准确性。
然而,重要性排序也存在一些问题,比如如何确定事物的重要性等。
五、频率排序频率排序是按照事物出现的次数对其进行排序。
这种排序规则适用于需要按照出现次数进行排序的场景,如搜索结果的排序、词频统计等。
频率排序的优势在于可以更好地反映出事物的普遍性和重要性,便于分析和决策。
然而,频率排序也存在一些问题,比如当频率相同时,无法确定它们的顺序。
六、权重排序权重排序是按照事物的权重值对其进行排序。
第1篇一、实验目的1. 理解字典序法的基本原理和实现方法。
2. 掌握使用字典序法生成全排列的步骤。
3. 验证字典序法生成的全排列是否正确,并分析其效率。
二、实验原理字典序法是一种生成全排列的经典算法,其基本原理是将排列按照字典的顺序进行排序。
具体来说,对于给定的n个字符或数码,我们可以将它们看作一个字符串,并按照字典序进行比较和排序。
通过这种方式,我们可以得到所有可能的排列,并按照字典序进行排列。
三、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm四、实验步骤1. 定义输入数据:首先定义一个包含待排列字符或数码的列表。
2. 实现字典序法:编写一个函数,用于生成当前排列的下一个字典序排列。
3. 生成全排列:使用循环结构,不断调用字典序法函数,直到生成所有排列。
4. 验证结果:检查生成的排列是否正确,并统计排列数量。
五、实验结果与分析1. 输入数据:定义一个包含字符a、b、c的列表`input_list = ['a', 'b','c']`。
2. 实现字典序法:```pythondef next_permutation(lst):找到从后向前第一个升序对i = len(lst) - 2while i >= 0 and lst[i] >= lst[i + 1]: i -= 1if i == -1:return False 无下一个排列找到从后向前第一个大于lst[i]的元素j = len(lst) - 1while lst[j] <= lst[i]:j -= 1交换元素lst[i], lst[j] = lst[j], lst[i]反转从i+1到末尾的元素lst[i + 1:] = reversed(lst[i + 1:])return True```3. 生成全排列:```pythoninput_list = ['a', 'b', 'c']permutations = []while next_permutation(input_list):permutations.append(''.join(input_list)) print(permutations)```4. 验证结果:生成的全排列为`['abc', 'acb', 'bac', 'bca', 'cab', 'cba']`,验证正确。
字典序的定义-概述说明以及解释1.引言1.1 概述字典序是一种排序方法,它基于字母或数字的顺序,按照从左到右的顺序逐个比较字符或数字的大小。
在字典序中,首先比较第一个字符或数字,如果相同,则继续比较第二个字符或数字,以此类推,直到找到不同的字符或数字为止。
根据比较结果来确定其在序列中的位置。
字典序在日常生活中非常常见,我们在查看字典、电话簿、学生名单等时经常会遇到。
它不仅在实际应用中具有很大的作用,而且在计算机科学中也是一个重要的概念。
字典序的应用非常广泛,如字符串排序、搜索引擎排序算法、数据库索引等。
在字符串排序中,我们可以使用字典序将字符串按照字母顺序进行排序,这对于进行字符串的查找和比较非常有帮助。
在搜索引擎中,字典序能够根据搜索关键词的字母顺序将搜索结果进行排序,提高搜索效率。
而数据库索引则可以使用字典序对数据库中的数据进行排序和查找。
本文将重点介绍字典序的定义和应用,通过对字典序的深入了解,可以更好地理解其在实际生活和计算机科学中的重要性和应用价值。
同时,本文还将展望字典序在未来的发展趋势,探讨其在更多领域中的应用前景。
1.2文章结构1.2 文章结构本文将按照以下结构进行叙述:第一部分是引言。
引言主要包括三个部分:概述、文章结构和目的。
在概述中,将简要介绍字典序的概念和重要性。
文章结构部分将对整篇文章的组织结构进行说明,提供读者整体了解文章脉络的导引。
目的部分说明本文撰写的目的,明确了解字典序定义和应用的重要性。
第二部分是正文。
正文包括两个部分:字典序的定义和字典序的应用。
其中,字典序的定义部分将详细解释字典序的含义、定义和特点。
此部分将探讨字典序如何根据字母表的排列顺序进行排序,以及如何应用于不同的情境中。
字典序的应用部分将探讨字典序在实际生活中的各种应用,如字符串排序、排列组合问题等。
将通过实例和案例来说明字典序在不同领域中的实际应用,并探讨其优势和局限性。
第三部分是结论。
结论部分将总结全文的主要观点和观点。
字典排序法详解
排列问题中,有一种字典排序法,字典排序法的的规律就是:最右边的数,从右往左,遇到第一个比其小的数时,排列到这个数的前面,原来的数则排在此数后面。
然后最右边的数再从右往左,遇到第一个比其小的数时排列到这个数的前面,剩下的数排列顺序不变。
按此循环,最右边的数遇到第一个比其小的数时,就排列到其前面,剩下的数排列顺序不变,依此类推。
例:如何将排列1 2 3 4 5变成5 4 3 2 1 ?
排列1 2 3 4 5 ,最右边的一个数是5,然后从右往左数,遇到的第一个比5小的数是4,则把5排到4的前面,排列变成了1 2 3 5 4。
此时最右边的数变成了4,从右往左,遇到的第一个比4小的数是3,则把4排到3的前面,剩下的数排列次序不变,于是排列变成了1 2 4 3 5。
如此循环下去,将排列1 2 3 4 5变成5 4 3 2 1则需要进行一下步骤:
12345
12354
12435
12453
13245
13254
13425 13452 21345 21354 21435 21453 23145 23154 23415 23451 23541 24351 24531 32451 32541 34251 34521 35421 43521 45321 54321。
字典序算法我们先看⼀个例⼦。
⽰例: 1 2 3的全排列如下:1 2 3 , 1 3 2 , 2 1 3 , 2 3 1 , 3 1 2 , 3 2 1我们这⾥是通过字典序法找出来的。
那么什么是字典序法呢?从上⾯的全排列也可以看出来了,从左往右依次增⼤,对这就是字典序法。
可是如何⽤算法来实现字典序法全排列呢?我们再来看⼀段⽂字描述:(⽤字典序法找124653的下⼀个排列)你主要看红⾊字体部分就⾏了,这就是步骤。
如果当前排列是124653,找它的下⼀个排列的⽅法是,从这个序列中从右⾄左找第⼀个左邻⼩于右邻的数,如果找不到,则所有排列求解完成,如果找得到则说明排列未完成。
本例中将找到46,计4所在的位置为i,找到后不能直接将46位置互换,⽽⼜要从右到左到第⼀个⽐4⼤的数,本例找到的数是5,其位置计为j,将i与j所在元素交换125643,然后将i+1⾄最后⼀个元素从⼩到⼤排序得到125346,这就是124653的下⼀个排列。
下图是⽤字典序法找1 2 3的全排列(全过程):代码实现(C语⾔):1 #include <stdio.h>2//交换list[a],list[b]3void Swap(int list[], int a, int b)4 {5int temp = 0;6 temp = list[a];7 list[a] = list[b];8 list[b] = temp;9return;10 }11//将list区间[a,n]之间的数据由⼩到⼤排序12void Sort(int list[], int a, int n)13 {14int temp = 0;15for (int i = 1; i < n-a; ++i)16for (int j = a+1; j < n-1; ++j)17if (list[j] > list[j+1])18 {19 temp = list[j];20 list[j] = list[j+1];21 list[j+1] = temp;22 }23return;24 }25//全排列26void Prim(int list[], int n)27 {28int num = 1, a = 0, b = 0;29for (int i = n; i > 0; --i) //计算有多少种情况,就循环多少次30 num *= i;31while (num--)32 {33for (int i = 0; i < n; ++i) //打印情况34 printf("%d ",list[i]);35 printf("\n");3637for (int i = n-1; i > 0; --i) //从右往左,找出第⼀个左边⼩于右边的数,设为list[a] 38if (list[i-1] < list[i])39 {40 a = i-1;41break;42 }43for (int j = n-1; j > a; --j) //从右往左,找出第⼀个⼤于list[a]的数,设为list[b] 44if (list[j] > list[a])45 {46 b = j;47break;48 }49 Swap(list, a, b); //交换list[a],list[b]50 Sort(list, a, n); //将list[a]后⾯的数据,由⼩往⼤排列51 }52return;53 }54//主函数55int main()56 {57int list[] = {1,2,3,4};58 Prim(list,3);59return0;60 }。
算法设计与分析课程实验与设计福州大学王晓东第1章算法概述算法实现题1-1 统计数字问题算法实现题1-2 字典序问题算法实现题1-3 最多约数问题算法实现题1-4 金币阵列问题算法实现题1-5 最大间隙问题第2章递归与分治策略算法实现题2-1 输油管道问题算法实现题2-2 众数问题算法实现题2-3 邮局选址问题算法实现题2-4 马的Hamilton周游路线问题算法实现题2-5 半数集问题算法实现题2-6 半数单集问题算法实现题2-7 士兵站队问题算法实现题2-8 有重复元素的排列问题算法实现题2-9 排列的字典序问题算法实现题2-10 集合划分问题算法实现题2-11 集合划分问题2算法实现题2-12 双色Hanoi塔问题算法实现题2-13 标准2维表问题算法实现题2-14 整数因子分解问题第3章动态规划算法实现题3-0 独立任务最优调度问题算法实现题3-1 最少硬币问题算法实现题3-2 序关系计数问题算法实现题3-3 多重幂计数问题算法实现题3-4 编辑距离问题算法实现题3-5 石子合并问题算法实现题3-6 数字三角形问题算法实现题3-7 乘法表问题算法实现题3-8 租用游艇问题算法实现题3-9 汽车加油行驶问题算法实现题3-10 最小m段和问题算法实现题3-11 圈乘运算问题算法实现题3-12 最大长方体问题算法实现题3-13 正则表达式匹配问题算法实现题3-14 双调旅行售货员问题算法实现题3-15 最大k乘积问题算法实现题3-16 最少费用购物算法实现题3-17 收集样本问题算法实现题3-18 最优时间表问题算法实现题3-19 字符串比较问题算法实现题3-20 有向树k中值问题算法实现题3-21 有向树独立k中值问题算法实现题3-22 有向直线m中值问题算法实现题3-23 有向直线2中值问题算法实现题3-24 树的最大连通分支问题算法实现题3-25 直线k中值问题算法实现题3-26 直线k覆盖问题算法实现题3-27 m处理器问题算法实现题3-28 红黑树的红色内结点问题第4章贪心算法算法实现题4-1 会场安排问题算法实现题4-2 最优合并问题算法实现题4-3 磁带最优存储问题算法实现题4-4 磁盘文件最优存储问题算法实现题4-5 程序存储问题算法实现题4-6 最优服务次序问题算法实现题4-7 多处最优服务次序问题算法实现题4-8 d森林问题算法实现题4-9 汽车加油问题算法实现题4-10 区间覆盖问题算法实现题4-11 硬币找钱问题算法实现题4-12 删数问题算法实现题4-13 数列极差问题算法实现题4-14 嵌套箱问题算法实现题4-15 套汇问题算法实现题4-16 信号增强装置问题算法实现题4-17 磁带最大利用率问题算法实现题4-18 非单位时间任务安排问题算法实现题4-19 多元Huffman编码问题算法实现题4-20 多元Huffman编码变形算法实现题4-21 区间相交问题算法实现题4-22 任务时间表问题算法实现题4-23 最优分解问题算法实现题4-24 可重复最优分解问题算法实现题4-25 可重复最优组合分解问题算法实现题4-26 旅行规划问题算法实现题4-27 登山机器人问题第5章回溯法算法实现题5-1 子集和问题算法实现题5-2 最小长度电路板排列问题算法实现题5-3 最小重量机器设计问题算法实现题5-4 运动员最佳匹配问题算法实现题5-5 无分隔符字典问题算法实现题5-6 无和集问题算法实现题5-7 n色方柱问题算法实现题5-8 整数变换问题算法实现题5-9 拉丁矩阵问题算法实现题5-10 排列宝石问题算法实现题5-11 重复拉丁矩阵问题算法实现题5-12 罗密欧与朱丽叶的迷宫问题算法实现题5-13 工作分配问题算法实现题5-14 独立钻石跳棋问题算法实现题5-15 智力拼图问题算法实现题5-16 布线问题算法实现题5-17 最佳调度问题算法实现题5-18 无优先级运算问题算法实现题5-19 世界名画陈列馆问题算法实现题5-20 世界名画陈列馆问题(不重复监视)算法实现题5-21 2´2´2魔方问题算法实现题5-22 魔方(Rubik’s Cube)问题算法实现题5-23 算24点问题算法实现题5-24 算m点问题算法实现题5-25 双轨车皮编序问题算法实现题5-26 多轨车皮编序问题算法实现题5-27 部落卫队问题算法实现题5-28 虫蚀算式问题算法实现题5-29 完备环序列问题算法实现题5-30 离散01串问题算法实现题5-31 喷漆机器人问题算法实现题5-32 子集树问题算法实现题5-33 0-1背包问题算法实现题5-34 排列树问题算法实现题5-35 一般解空间搜索问题算法实现题5-36 最短加法链问题算法实现题5-37 n2-1谜问题算法实现题6-1 最小长度电路板排列问题算法实现题6-2 最小长度电路板排列问题算法实现题6-3 最小权顶点覆盖问题算法实现题6-4 无向图的最大割问题算法实现题6-5 最小重量机器设计问题算法实现题6-6 运动员最佳匹配问题算法实现题6-7 n皇后问题算法实现题6-8 圆排列问题算法实现题6-9 布线问题算法实现题6-10 最佳调度问题算法实现题6-11 无优先级运算问题算法实现题6-12 世界名画陈列馆问题算法实现题6-13 子集树问题算法实现题6-14 排列树问题算法实现题6-15 一般解空间的队列式分支限界法算法实现题6-16 子集树问题算法实现题6-17 排列树问题算法实现题6-18 一般解空间的优先队列式分支限界法算法实现题6-19 骑士征途问题算法实现题6-20 推箱子问题算法实现题6-21 图形变换问题算法实现题6-22 行列变换问题算法实现题6-23 重排n2宫问题算法实现题6-24 最长距离问题算法实现题7-1 模平方根问题算法实现题7-2 素数测试问题算法实现题7-3 集合相等问题算法实现题7-4 逆矩阵问题算法实现题7-5 多项式乘积问题算法实现题7-6 皇后控制问题算法实现题7-7 3SAT问题算法实现题7-8 战车问题算法实现题7-9 圆排列问题算法实现题7-10 骑士控制问题算法实现题7-11 骑士对攻问题第8章线性规划与网络流算法实现题8-1 飞行员配对方案问题算法实现题8-2 太空飞行计划问题算法实现题8-3 最小路径覆盖问题算法实现题8-4 魔术球问题算法实现题8-5 圆桌问题算法实现题8-6 最长递增子序列问题算法实现题8-7 试题库问题算法实现题8-8 机器人路径规划问题算法实现题8-9 方格取数问题算法实现题8-10 餐巾计划问题算法实现题8-11 航空路线问题算法实现题8-12 软件补丁问题算法实现题8-13 星际转移问题算法实现题8-14 孤岛营救问题算法实现题8-15 汽车加油行驶问题算法实现题8-16 数字梯形问题算法实现题8-17 运输问题算法实现题8-18 分配问题算法实现题8-19 负载平衡问题算法实现题8-20 深海机器人问题算法实现题8-21 最长k可重区间集问题算法实现题8-22 最长k可重线段集问题算法实现题8-23 火星探险问题算法实现题8-24 骑士共存问题第9章NP完全性理论与近似算法算法实现题9-1旅行售货员问题的近似算法算法实现题9-2 可满足问题的近似算法算法实现题9-3 最大可满足问题的近似算法算法实现题9-4 子集和问题的近似算法算法实现题9-5 子集和问题的完全多项式时间近似算法算法实现题9-6 2SAT问题的线性时间算法算法实现题9-7 实现算法greedySetCover《算法设计与分析》期中试卷1 试题1 数列极差问题试题2 双调TSP回路问题试题3 最佳调度问题《算法设计与分析》期中试卷2 试题1 石子合并问题试题2 整数因子分解问题试题3 汽车加油问题《算法设计与分析》期终试卷1 试题1 乘法表问题试题2 工作分配问题试题3 飞行员配对方案问题《算法设计与分析》期终试卷2 试题1 直线k中值问题试题2 图形变换问题试题3 无向图的最大割问题。
排列的字典序问题Problem Descriptionn个元素{1,2,...,n}有n!个不同的排列。
将这n!个排列按字典序排列并编号为0,1,...,n!-1。
每个排列的编号为其字典序值。
例如,当n=3时,6个不同排列的字典序值如下:字典序值012345排列123132213231312321给定n,以及n个元素{1,2,...,n}的⼀个排列,计算出这个排列的字典序值,以及按字典序排列的下⼀个排列。
Input输⼊包括多组数据。
每组数据的第⼀⾏是元素个数n(1<=n<=13),接下来1⾏是n个元素{1,2,...,n}的⼀个排列。
Output对于每组数据,输出两⾏,第⼀⾏是字典序值,第2⾏是字典序排列的下⼀个排列。
Sample Input8 2 6 4 5 8 1 7 3Sample Output82272 6 4 5 83 1 7-----------------------------------------------------------------此处为⽐较,可以掠过不看,直接下拉----------------------------------------------------------------------------------------------------------------------------排列的字典序,此题似乎与之前说过的类似,但是输⼊顺序有区别的。
输⼊123全排列输出:123132213231321312字典序输出:123132213231312321区别在于最后的两⾏,为什么会出现这样的情况呢?是因为在全排列问题时,利⽤的是对原数组进⾏替换。
初始:1 2 3交换[1] [3] ,则变成 3 2 1,再接下来的替换中,就按照 2 1进⾏的。
若想按照字典序输⼊,需要利⽤头尾数组算法。
建⽴两个数组 head,tail初始化head为空,tail 为n个顺序元素。
字典序排序规则
字典序排序规则是一个重要的技术概念,它广泛应用于计算机程序设计和其他数据处理领域。
字典序排序是一种排序算法,它将字符串按照字母表顺序进行排列。
它通常被用来给字符串、数字或其他类型的数据按字母顺序排序,这是实现简单比较的一种方法。
字典序排序规则的实现主要基于字母表的序列排序,字母表的顺序通常以下面几大条例为基础:
1、按字母的字母表顺序排列:从小写到大写,从A到Z;
2、小写的字母在大写的字母之前;
3、同样的字母,根据拼音或其他支配方法来排列,例如同样是“a”,小写字母a”排在大写字母A”之前;
4、如果字符串中出现相同的字母,根据下一个字母来排序,并且比较它们的字典序。
举例来说,根据字典序排序规则,字符串“abc”、“abd”、“aag”、“aaz”应该按照下面的顺序来排列:
“abc”、“aag”、“abd”、“aaz”。
字典序排序规则的优点在于它的实现简便快捷。
它可以在常数时间复杂度内完成排序,因此可以用来排序大量数据,而且在拼写错误和其他不同分类方法中效果都非常好。
字典序排序也可以用于不同字符串的比较,因此在字符串比较方面效果也很好。
字典序排序是一种常用的字符串排序方法,它已经被广泛应用于排序数据和文件的名称,让查找和访问变得更方便,也可以用于不同
字符串的比较,提高效率。
它的实现简便快捷,而且效率较高,在某些情况下可以节省时间和空间,比如排序大量数据时。
因此,字典序排序规则在计算机程序设计和其他数据处理领域应用非常广泛,是一种重要的技术概念。
1、问题一:
【①问题描述】
一本书的页码从自然数1 开始顺序编码直到自然数n。
书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。
例如,第6页用数字6表示而不是06或006等。
数字计数问题要求对给定书的总页码n计算出书的全部页码中分别用到多少次数字0、1、2、 (9)
【②问题分析】
给定表示书的总页码的10 进制整数n (1≤n≤109) 。
编程计算书的全部页码中分别用到多少次数字0、1、2、 (9)
【③算法设计】
将页码数除以10,得到一个整数商和余数,商就代表页码数减余数外有多少个1—9作为个位数,余数代表有1—余数本身这么多个数作为剩余的个位数。
此外,商还代表1—商本身这些数出现了10次,余数还代表剩余的没有计算的商的大小的数的个数。
把这些结果统计起来即可。
【④算法实现】
#include "stdio.h"
void main()
{
int i,a[10];
long data,j,k;
scanf("%ld",&data);
for(i=0;i<10;i++)
{
a[i]=0;
}
for(j=data;j>0;j--)
{
k=j;
while(k>0)
{
i=k%10;
a[i]++;
k=k/10;
}
}
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
【⑤测试数据】
输入:11
【⑥运行结果】
2、问题二
【①问题描述】
在数据加密和数据压缩中常需要对特殊的字符串进行编码。
给定的字母表A 由26 个小写英文字母组成A={a,b,…,z}。
该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1 次。
例如,
a,b,ab,bc,xyz 等字符串都是升序字符串。
现在对字母表A 产生的所有长度不超过6 的升序
1 2 …26 27 28 …
a b …z ab ac …
对于任意长度不超过6 的升序字符串,迅速计算出它在上述字典中的编码。
【②问题分析】
考察一般情况下长度不超过k的升序字符串。
设以第i个字符打头的长度不超过K 升序字符串个数为f(i,k),长度不超过K的升序字符
总个数为g(k),则g(k) = ∑-
=
k
i
k
i
f
27
1
)
,(
,以第i个字母开头的长度为1的字符串有一个。
即:
f(i,1)=1
长度1的升序字符串分别是:a,b,c,d,…,x,y,z。
共26个。
即:
g(1)= ∑-
=
1
27
1
)1,(
i
i
f
=26。
【③算法设计】
数据输入:输入数据由文件名为input.txt的文本文件提供。
文件的第一行是一个正整数k,表示接下来共有k行。
接下来的k 行中,每行给出一个字符串。
结果输出:将计算结果输出到文件output.txt中。
文件共有k 行,每行对应于一个字符串的编码。
【④算法实现】
#include<cstdio>
#include<string.h>
#include<iostream>
using namespace std;
int a[27][7]={0};
void InitComponent();//初始化组合数a[i][j]表示C(i,j)
int IsValidate(char c[]);//判断读入的字符串是否升序
int main() {
int n,strln,result;
int i,j,k;
char str[7];
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
InitComponent();
cin>>n;
while(n--)
{
cin>>str;
if(!IsValidate(str))
{
cout<<"invalid!\n"; continue;
} result=1;
strln=strlen(str);
for(j=1;j<strln;j++)//步骤(1)
result+=a[26][j];
for(i=0;i<str[0]-'a';i++)//步骤(3)
result+=a[26-1-i][strln-1];
for(k=1;k<strln;k++)//步骤(4)(5)(6)类似步骤(3)
{
for(i=str[k-1]-'a'+1;
i<(int)str[k]-'a';i++)
{
result+=a[26-i-1][strln-k-1];//第一次错误地写成[26-i] }
}
cout<<str<<"\t"<<result<<endl;
} return 0;
}
void InitComponent()//初始化组合数a[i][j]表示C(i,j)
{
int i,j,k;
for(i=26;i>=0;i--)
{
a[i][0]=1;
a[i][1]=i;
k=i+1;
for(j=2;j<7;j++)
{
if(j>i)break;
a[i][j]=a[i][j-1]*(k-j)/j;
}
}
}
int IsValidate(char c[])//判断读入的字符串是否升序
{
int len=strlen(c),i;
for(i=0;i<len-1;i++)
{
if(c[i]>=c[i+1])
return 0;
}
return 1;
}
【⑤测试数据】
输入:
2
a
ab
【⑥运行结果】。