五筆的字典序編碼與解碼

2021-09-27 16:13:43 字數 1644 閱讀 2966

假定一種編碼的編碼範圍是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.

輸入描述:

輸入乙個待編碼的字串,字串長度小於等於100.
輸出描述:

輸出這個編碼的index
示例1

輸入

baca
輸出

16331
編碼方式如下:

第一種

#include #include using namespace std;

const int arr = ;

int main()

printf("%d\n", ans);

return 0;

}

第二種:

#include #include #define n1 1

#define n2 25

#define n3 (25 * 25)

#define n4 (25 * 25 * 25)

#define c1 n1

#define c2 (n1 + n2)

#define c3 (n1 + n2 + n3)

#define c4 (n1 + n2 + n3 + n4)

int main()

; scanf("%s", code);

int index = 0;

switch(strlen(code))

printf("%d\n", index);

return 0;

}

最開始我理解的編碼方式為:a,aa,aaa,aaaa,aaab,...,ayyy,aba,abb,abc,...,ayy,ab,ac,...ay,b,ba,baa,...

即a,aa,aaa,然後為四個字母,第乙個位置固定為a,剩下三個位置為排列組合(25*25*25種),然後為三個字母,第乙個位置為a,剩下兩個位置為排列組合(25*25種),然後為兩個字母,第乙個位置為a,剩下乙個位置為排列組合(25種);

接著b,bb,bbb,然後為四個字母,第乙個位置固定為b,剩下三個位置為排列組合(25*25*25種),然後為三個字母,第乙個位置為b,剩下兩個位置為排列組合(25*25種),然後為兩個字母,第乙個位置為b,剩下乙個位置為排列組合(25種);

直到y,yy,yyy...

這種理解是不對的,這道程式設計題有兩個難點,第乙個就是如何對其編碼,開始我理解錯了;第二個就是細節問題,加1與不加1的分析。

五筆的編碼和解碼

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的inde...

五筆的編碼和解碼

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的inde...

演算法練習 五筆編碼

五筆的編碼範圍是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為...