腾讯笔试题——五笔编码
生活随笔
收集整理的這篇文章主要介紹了
腾讯笔试题——五笔编码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
騰訊編程題——五筆編碼
假定一種編碼的編碼范圍是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+1 s = input() s = list(s) ## 由于index從0開始,無需加1 if 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) baca 16331總結
以上是生活随笔為你收集整理的腾讯笔试题——五笔编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序帮你赚到第一桶金
- 下一篇: 十年后是计算机人员的作文,二十年后的电子