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,如:
输入:baca
输出:16331
2.题目分析
例如:我们来分析一下以字母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种
所以当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+)+1+2x(1+25)+1=16331
3.code
讯享网#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; }


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/35913.html