【腾讯面试题】欢迎讨论算法

小么小儿郎 2011-10-03 09:27:31
五笔的编码范围是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对应的编码。
...全文
463 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
初夏阳光 2011-10-26
  • 打赏
  • 举报
回复
那个用树建立的模型,很经典!强
小么小儿郎 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 zephyr_main 的回复:]

引用 34 楼 yedaoq 的回复:

26进制数的计算而已

30分钟你出个算法来?
[/Quote]
别看别人的东西,自己研究。
小么小儿郎 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 yedaoq 的回复:]

26进制数的计算而已
[/Quote]
30分钟你出个算法来?
小么小儿郎 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 yedaoq 的回复:]

26进制数的计算而已
[/Quote]
错!
flowerjack 2011-10-04
  • 打赏
  • 举报
回复
flowerjack 2011-10-04
  • 打赏
  • 举报
回复
yedaoq 2011-10-04
  • 打赏
  • 举报
回复
26进制数的计算而已
1551595 2011-10-04
  • 打赏
  • 举报
回复
新来的,感觉长了见识
小么小儿郎 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 mingliang1212 的回复:]

引用 28 楼 zephyr_main 的回复:

呵呵,这个貌似是对的呢。看走眼了。呵呵。


我也懂你意思了。

我把我的那个拆开来看的确也是 级数求和。
[/Quote]
NICE就是这个意思。揭帖,接分,分不多,就是讨论而已,加个好友吧!
iamnobody 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 zephyr_main 的回复:]

呵呵,这个貌似是对的呢。看走眼了。呵呵。
[/Quote]

我也懂你意思了。

我把我的那个拆开来看的确也是 级数求和。
小么小儿郎 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zephyr_main 的回复:]

引用 18 楼 mingliang1212 的回复:

C/C++ code




int char_to_index(char* pch){
const static int arr[4] = {25*(25*26+1)+1,25*26+1,26,1};
int Index;
for(int i = 0; *pch != '\0'; pch++,i++)
Index +……
[/Quote]
呵呵,这个貌似是对的呢。看走眼了。呵呵。
小么小儿郎 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 mingliang1212 的回复:]

引用 22 楼 zephyr_main 的回复:
引用 19 楼 mingliang1212 的回复:

上面不记得把Index 赋初值0了。
楼主我不懂你这一句是什么意思,请教一下:


for (int j=0;j<common_indexs[i]-1;j++)
{
last_index+=(1-(int)pow((double)25,4-i))/(1-25);……
[/Quote]
一位:1+n(1)*25^3,两位1+n(1)*25^3+1+n(2)*25^2,三位1+n(1)*25^3+1+n(2)*25^2+1+n(3)*25,四位:1+n(1)*25^3+1+n(2)*25^2+1+n(3)*25+1+n(4)即可。
iamnobody 2011-10-03
  • 打赏
  • 举报
回复
看来是我多虑了。
虽然不知道为什么,你我的程序运行起来好像结果是一样的。但是你的原理我不懂。。。
iamnobody 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 zephyr_main 的回复:]
引用 19 楼 mingliang1212 的回复:

上面不记得把Index 赋初值0了。
楼主我不懂你这一句是什么意思,请教一下:


for (int j=0;j<common_indexs[i]-1;j++)
{
last_index+=(1-(int)pow((double)25,4-i))/(1-25);
}


首先你想象这样一个模型:
……
[/Quote]

你没有考虑长度为 1- 3这几种情况:

a b c
|
0abc... 这里跟下面的推理相似
| \
没 0abc...实际上这里的b 和 a 间有 26个。
/ \
没 0abc...
小么小儿郎 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 mingliang1212 的回复:]

引用 21 楼 zephyr_main 的回复:
引用 18 楼 mingliang1212 的回复:

C/C++ code




int char_to_index(char* pch){
const static int arr[4] = {25*(25*26+1)+1,25*26+1,26,1};
int Index;
for(int i = 0; *pch !=……
[/Quote]
题目是a=1啦。另外我从零开始只是为了寻找跨越了多少个,并不是索引。
iamnobody 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zephyr_main 的回复:]
引用 18 楼 mingliang1212 的回复:

C/C++ code




int char_to_index(char* pch){
const static int arr[4] = {25*(25*26+1)+1,25*26+1,26,1};
int Index;
for(int i = 0; *pch != '\0'; pch++,i++)
Index +=……
[/Quote]

0;
你题目不是说从0开始吗?
小么小儿郎 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 mingliang1212 的回复:]

上面不记得把Index 赋初值0了。
楼主我不懂你这一句是什么意思,请教一下:


for (int j=0;j<common_indexs[i]-1;j++)
{
last_index+=(1-(int)pow((double)25,4-i))/(1-25);
}
[/Quote]

首先你想象这样一个模型:
a b c
/ \ / \ / \ ......
aa..ay ba...by ca...cy

而且,每颗树下面都是子树,一共有四层。
而a=1,aa=2,那么顺序数下来是这样的,先定位第一个字母的索引,跨越一个字母就需要加上25^3,定位好之后向下移动,每移动一个位置加1,然后在横向移动,定位第二个,每跨越一个索引增加25^2,在向下索引+1,在横向,以此类推。最后定位完毕。

/ \
aa..ay
小么小儿郎 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 mingliang1212 的回复:]

C/C++ code




int char_to_index(char* pch){
const static int arr[4] = {25*(25*26+1)+1,25*26+1,26,1};
int Index;
for(int i = 0; *pch != '\0'; pch++,i++)
Index += (*pch - 'a') * a……
[/Quote]
请问如果只输入a的话这段程序结果是?
小么小儿郎 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 starc 的回复:]

我说下我的思路吧,就当26(26还是25一下反应不过来了)进制数算呗,就像十进制转二进制和二进制转十二进制一样
[/Quote]
但是他并不是逢25进1啊。a=1,aa=2,aaa=3,aaaa=4,aaay=29,aab=30,aaba=31...aaby=55...
iamnobody 2011-10-03
  • 打赏
  • 举报
回复
上面不记得把Index 赋初值0了。
楼主我不懂你这一句是什么意思,请教一下:


for (int j=0;j<common_indexs[i]-1;j++)
{
last_index+=(1-(int)pow((double)25,4-i))/(1-25);
}

加载更多回复(18)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧