博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
五笔的编码和解码
阅读量:5248 次
发布时间:2019-06-14

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

Q:五笔的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把五笔的编码按字典序排序,形成一个数组如下:

    a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy
其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。
1)编写一个函数,输入是任意一个编码,比如baca,输出这个编码对应的Index;
2)编写一个函数,输入是任意一个Index,比如12345,输出这个Index对应的编码。


A:初看一下,编码并不是按照数位大小进行,而是按照字典序进行排序。首先通过枚举一些例子找找规律。

index[a]=0,index[aa]=1,index[aaa]=2,index[aaaa]=3,前四个字符串的规律是strlen(str)-1。

我们再看已知index[a]求index[b]。a,aa,aaaa,aaab,…,ayyy。其中aa->ay(25个数),aaa->ayyy(25*25个数),aaaa->ayyy(25*25*25个数),这样index[b]=index[a]+25^3+25^2+25+1

再看已知index[aa]求index[ab]。aa,aaa,aaaa,aaab,…,aayy。其中aaa->aay(25个数),aaaa->aayy(25*25个数),这样index[ab]=index[aa]+25^2+25+1

再看已知index[aaa]求index[aab]。aaa,aaaa,…,aaay。其中aaaa->aaay(25个数)。这样index[aab]=index[aaa]+25+1

再看已知index[aaaa]求index[aaab]。index[aaab]=index[aaaa]+1。

这样我们就可以将上述因子放在一个数组里。factor[]={25^3+25^2+25+1,25^2+25+1,25+1,1}

我们以bdce为例说明。

对字符串从左到右遍历,首先发现的是b,b距离a的相对index=factor[0],而index[a]=0,所以到达b是factor[0];再看第二个字符d,bd距离ba的长度为factor[1]*(b-a),而ba距离b的长度又为1;所以到达bd是1+factor[0]+factor[1]*(b-a);再看第三个字符c,bdc到bda的长度为factor[2]*(c-a),而bda距离bd的长度又为1,所以到达bdc是1+1+factor[0]+factor[1]*(b-a)+factor[2]*(c-a);最后再看e,bdce到bdca的长度为factor[3]*(e-a),而bdca距离bdc的长度又为1,所以到达dbce是1+1+1+factor[0]+factor[1]*(b-a)+factor[2]*(c-a)。所以编码就出来了。

int factor[]={25*25*25+25*25+25+1,25*25+25+1,25+1,1};int encode(char *str){	int len=strlen(str);	int index=len-1;	for(int i=0;i

 

对于第二个问题,解码就是编码的逆过程,也是顺序求字符串的1234个字符就行。

char* decode(int index){	char str[4];	int i=0;	while(index>=0)	{		str[i]='a'+index/factor[i];		index=index%factor[i];		--index;		++i;	}	str[i]='\0';	return str;}

转载于:https://www.cnblogs.com/daniagger/archive/2012/07/20/2600581.html

你可能感兴趣的文章
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
第三次作业
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>