腾讯笔试题——五笔编码

来源:互联网 发布:金蝶软件财务报表 编辑:程序博客网 时间:2024/05/29 17:24

腾讯编程题——五笔编码

假定一种编码的编码范围是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,以此类推。 编写一个函数,输入是任意一个编码,输出这个编码对应的Index.

问题描述:

问题即使找到输入编码对应的位置

先分析编码的第一位字母:比如 a { aa | aaa aaaa … aaay | aab aaba … aaby | … |aay aaya … aayy| } {ab | aba abaa … abab … abay | abb abba … abby | … |abyy}……. {ay | aya ayaa … ayay| … |ayy ayya … ayyy | } 共有 k*((25+1)*25+1)*25+1个编码

再分析编码的第二位字母:当第一位字母确定时,第二位编码 每换k个字母 如 ab–>ac 一共有 k*((25+1)*25+1)+1 将第一个一位码补上;

分析第三位子的字母: 当第二位的字母确定之后,第三位上,每换一个字母需经过:k*(25+1)+1 将第三位一开始前的两位码补上;

分析第四位:前三位确定好后,第四位即是该个编码在{a,b,c,…,y}中所对应的位置k+1,需要将开头的三位码补上

l = 'abcdefghijklmnopqrstuvwxy'l = list(l)## 第一位之前的个数函数def First(l,char):    k = l.index(char)    return k*((26*25+1)*25+1)## 第一位确定好后,第二位之前的个数函数def Second(l,char):    k = l.index(char)    return k*(26*25+1)+1## 第一第二位确定好后,第三位之前的个数函数def Third(l,char):    k = l.index(char)    return k*26+1## 第一,二,三位确定好后,第四位之前的个数函数def Four(l,char):    k = l.index(char)    return k+1s = input()s = list(s)## 由于index从0开始,无需加1if len(s)==1:    index = First(l,s[0])  if len(s)==2:    index = First(l,s[0])+Second(l,s[1])if len(s)==3:    index = First(l,s[0])+Second(l,s[1])+Third(l,s[2])if len(s)==4:    index = First(l,s[0])+Second(l,s[1])+Third(l,s[2])+Four(l,s[3])print(index)    
baca16331
原创粉丝点击