博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字典序问题的解决方案
阅读量:5870 次
发布时间:2019-06-19

本文共 1774 字,大约阅读时间需要 5 分钟。

问题描述:

在数据加密和数据压缩中常需要对特殊的字符串进行编码.给定的字母表A由26个小写英文字母组成,即A={a,b...z}.该字母表产生的长序字符串是指定字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次.例如,a,b,ab,bc,xyz,等字符串是升序字符串.现在对字母表A产生的所有长度不超过6的升序字符串按照字典排列编码如下:a(1),b(2),c(3).........,z(26),ab(27),ac(28),..................

对于任意长度不超过6的升序字符串,迅速计算出它在上述字典中的编码.

算法设计:
对于给定的长度不超过6的升序字符串,计算它在上述字典中的编码.
数据输入:
输出数据由文件名为input.txt的文本文件提供.文件的第1行是一个正整数k,表示接下来共有k行,在接下来的k行中,每行给出一个字符串.
结果输出:
将计算结果输出到文件output.txt.文件共有k行,文件共有k行,每行对应于一个字符串的编码.
  输入文件示例:
    input.txt
   2
   a
   b
输出文件示例:
output.txt
1
2

 

#include 
#include
using namespace std;//计算阶乘int factorial(int n){ if (n==0) { return 1; } int sum=1; for (int i=1;i<=n;i++) { sum*=i; } return sum;}//统计n位中取p位的情况个数int getnp(int p,int n){ int sum=1; for (int i=n-p+1;i<=n;i++) { sum*=i; } return sum/factorial(p);}//统计在总位数一样的情况下第p位前有多少int getp(char a,int p,int n){ int sum = 0; for (int i = n+1;i<(a-'a'+1);i++) { sum += getnp(p-1,(26-i)); } return sum;}void main(){ int sum=0; int size=0; char buffer[20]; ifstream inputfile("D:\\12.txt.txt"); ofstream outputfile("1-2out.txt"); while(!inputfile.eof()) { inputfile.getline(buffer,20); sum=0; size = strlen(buffer); for (int i=1;i

如上代码,思想为,例如egh这样的情况,那我们先把只有一位长的情况和两位长的加起来,即为26C1和26C2,然后找出起始位为a,b,c,d的三位单词的情况,它们也排在efg之前,即为25C2,24C2,23C2,22C2(这里需要注意并不是26C2了,因为如果为a开头,那后面两位只能从b以后的数开始选,即25个,b开头的为24个以此类推),然后考虑e开头的,因为在上面的情况过后就是高位以e开头的情况,这个时候需要注意,eah,ebh这样的并不合理,所以我们要将getp(buffer[i],size-i,buffer[i-1]-'a'+1),buffer[i]和buffer[i-1]进行比较即为e和g进行比较然后通过比较只有ef为开头的才合理,然后我们计算从efa到efz,继而到最后一位由于ega,egb这种不存在(通过buffer的比较可知),因此没有其他在eg开头的情况了,即是egh是eg开头的三位数的第一种情况,此时我们的定位工作就完毕了。

转载于:https://www.cnblogs.com/xds1224/p/3555058.html

你可能感兴趣的文章
可给pdf批量添加书签的神器
查看>>
CentOS Linux查询软件包的安装位置
查看>>
TFT LCD 7寸1024*600 FPGA点亮
查看>>
request.getInputStream()乱码处理方法
查看>>
Android硬件抽象层(HAL)深入剖析(二)
查看>>
iOS中perform+@selector多参数传递
查看>>
Mysql列类型:日期时间型
查看>>
java 编程中的非空判断怎么加才优雅?
查看>>
zookeeper的原理及应用
查看>>
如何阅读一本书(记录)
查看>>
BGP选路方法
查看>>
2011年度十大杰出IT博客
查看>>
SAS硬盘指示灯状态对照表
查看>>
java并发编程系列阅读笔记
查看>>
Configuring Hive On Spark
查看>>
spring boot中实现响应图片的方法以及改进
查看>>
Leetcode日记8
查看>>
Java多线程技能
查看>>
从 Project Professional 中登录 Project Server
查看>>
单链表的一些经典面试题
查看>>