天天看点

腾讯笔试题——五笔编码腾讯编程题——五笔编码

腾讯编程题——五笔编码

假定一种编码的编码范围是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*((*+)*+)
## 第一位确定好后,第二位之前的个数函数
def Second(l,char):
    k = l.index(char)
    return k*(*+)+
## 第一第二位确定好后,第三位之前的个数函数
def Third(l,char):
    k = l.index(char)
    return k*+
## 第一,二,三位确定好后,第四位之前的个数函数
def Four(l,char):
    k = l.index(char)
    return k+
s = input()
s = list(s)
## 由于index从0开始,无需加1
if len(s)==:
    index = First(l,s[])  
if len(s)==:
    index = First(l,s[])+Second(l,s[])
if len(s)==:
    index = First(l,s[])+Second(l,s[])+Third(l,s[])
if len(s)==:
    index = First(l,s[])+Second(l,s[])+Third(l,s[])+Four(l,s[])
print(index)    
           
baca
16331
           

继续阅读