字符序问题(1)

来源:互联网 发布:淘宝买家如何升级星级 编辑:程序博客网 时间:2024/05/21 10:49

问题描述:
在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表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 的升序字符串,迅速计算出它在上述字典中的编码。
编程任务:
对于给定的长度不超过6 的升序字符串,编程计算出它在上述字典中的编码。
数据输入:
输入数据由文件名为input.txt 的文本文件提供文件的第一行是一个正整数k,表示接下来共有k 行接下来的k 行中,每行给出一个字符串。
结果输出:
程序运行结束时,将计算结果输出到文件output.txt 中。文件共有k 行,每行对应于一
个字符串的编码。
输入文件示例 输出文件示例

inout.txt output.txt 2 1 a 2 b

—————-分隔线—————–

问题解答思路:由减至难的找规律,从中找到最基本且普适的规律。关键词:升序,不重复。

一.先找出固定长度的字符串有多少种编码可能

1.当字符串长度为1时:令字符串为A:A位置所有的可能为从a~z 合计26种。此为最简单的情况。
2。当字符串长度为2时:令字符串为AB(后面同理,不再重复此句):A位置上有a~x合计25种可能(不含有这种可能),当A位置上为a时:B位置上有b~z合计25种可能。同理:当A位置上的数字分别为b~x时,B位置上分别由24,23,22………..3,2,1种可能.所以当字符长度为2时,所有的可能为: 25i=1i .
3.当字符串长度为3时(ABC):在A位置上有a~x合计24可能,当A位置上为a时:BC位置有 24i=1i 种可能(分析方法与字符串长度为2时相同),同理当A位置为b时:BC位置有 23i=1i 种可能,依次如此分析,可得字符串长度为3时所有的可能性有:24j=125ji=1i 种。

以下分析方式相同:

4.字符串长度为4时:可能性:共23k=124kj=125ji=1i 种。
5.字符串长度为5时:可能性:共22m=123mk=124kj=125ji=1i 种。

二.计算出该字符串在该长度中的编号。

有了上面的基础,后面的容易理解的多了。以实际例子来举例。如此字符串为cdef。
则在长度为4的字符串中的位置为: 2k=124kj=125ji=1i +2j=125ji=1i+ 2i=1i+2+1
分析此式子:2k=124kj=125ji=1i 字符串cdef前面位置A处为a,b两种可能时所有的个数。同理2j=125ji=1i为字符串A位置为c,B位置为d,c两种可能时的所有个数。 2i=1i为字符串A位置为c,B位置为d,C位置为c,d两种可能时的所有个数。2为字符串A位置为c,B位置为d,C位置为e,D位置为d,f两种可能时的所有个数。

三.计算出字符串的编码

编码结果(以cdef为例):26+ 25i=1i+24j=125ji=1i+{2k=124kj=125ji=1i +2j=125ji=1i+ 2i=1i+2+1}
即:字符串长度为1的所有可能+字符串长度为二的所有可能+字符串长度为三的所有可能+其在长度为4的字符串中的排位。

四.代码

额。忽略,不重要(>.<其实是写不出来)。有几个关键的地方我还不能处理,也不想查现成的代码。后面能力够了把代码写在博客里。以后会写(2)来讲如何写代码

—————-分隔线—————–
如其中有问题,欢迎指正,共同进步。

0 0
原创粉丝点击