1.题目描述数组
假定一种编码的编码范围是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,如:编码
输入:bacaspa
输出:16331code
2.题目分析 blog
例如:咱们来分析一下以字母a开头的排列组合排序
{ {a,aa,aaa,aaaa,aaab,aaac,...,aaay} {aab,aaba,aabb,aabc,...,aaby} {...} {aay,aaya,aayb,...,aayy} {ab,aba,abaa,abab,...,abay} {...} {ay,aya,ayaa,ayab,...,ayay} {...} {ayyy} }
若首字母为a共有多少种组合:
①a 1种
②a _ 25种
③a _ _ 25x25种
④a _ _ _25x25x25种
若第二个字母为a共有多少种组合:
① _a_ 1种
②_a _ 25种
③_a _ _ 25x25种
若第三个字母为a共有多少种组合:
①_ _a 1种
② _ _a _ 25种
若第四个字母为a共有多少种组合:
① _ _ _a 1种io
因此当baca时以b开头时,前面有a开头(b-a)*(1+25+25*25+25*25825),第二位是a,(a-a)*(1+25+25*25)+1(但不能为空),第三位为c,(c-a)*(1+25)+1,第四位为a,(a-a)*(1)+1
baca=(1+25+2525+252525)+1+2x(1+25)+1=16331class
3.codeim
#include<stdio.h> int CreateIndex(const char* str) { if (str == NULL) return -1; int carry[4] = { 1 + 25 + 25 * 25 + 25 * 25 * 25, 1 + 25 + 25 * 25, 1 + 25, 1 }; int Index = 0; for (int i = 0; i < 4;++i) { if (str[i] >= 'a' && str[i] <= 'y') { Index = Index + (str[i] - 'a') * carry[i]; if (i != 0) ++Index; } } return Index; } int main() { const char* arr = "baca"; int res = CreateIndex(arr); printf("%d\n", res); return 0; }