五笔码字典序问题
五笔的编码范围是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,以此类推。
1)编写一个函数,输入是任意一个编码,比如baca,输出这个编码对应的Index;
2)编写一个函数,输入是任意一个Index,比如12345,输出这个Index对应的编码。
static void f(List<string> strs, string s, int d)
{
++d;
for (char c = 'a'; c <= 'y'; ++c)
{
string newS = s + c;
strs.Add(newS);
if (d < 4)
{
f(strs, newS, d);
}
}
}
static void Main(string[] args)
{
List<string> strs = new List<string>();
f(strs, string.Empty, 0);
// 测试:
for (int i = 0; i < 10; ++i) Print(strs[i]);
for (int i = -10; i < 0; ++i) Print(strs[strs.Count + i]);
Print(strs.BinarySearch("aaaa"));
}
浙公网安备 33010602011771号