免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: _mystic
打印 上一主题 下一主题

[C] 看看这两个面试题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-05 14:06 |显示全部楼层 |倒序浏览
昨天去了的笔试题,这是最后两个题。


1.
void func0(void);
void func1(void);
void func2(void);
void func3(void);
void func4(void);
void func5(void);

int MAIN(int N)
{
    if(N == 0) 执行func0;
    if(N == 1) 执行func1;
    if(N == 2) 执行func2;
    if(N == 3) 执行func3;
    if(N == 4) 执行func4;
    if(N == 5) 执行func5;
}



不使用 if 或是 switch 判断语句。

2.
void func0(void);
void func1(void);
void func2(void);
void func3(void);
void func4(void);
void func5(void);

int MAIN(int N)
{
    if(N == 33) 执行func0;
    if(N == 67) 执行func1;
    if(N == 150) 执行func2;
    if(N == 274) 执行func3;
    if(N == 331) 执行func4;
    if(N == 556) 执行func5;
}

问用什么方法能使得,执行的速度最快。

第一个题,我用的是 条件语句。
出来后想到了用函数指针数组更好。人家考的本意应该也是用函数指针数组吧!!

void func0(void);
void func1(void);
void func2(void);
void func3(void);
void func4(void);
void func5(void);

/* An array of 6 pointers to functions that take an void argument and return void */
void (*fun[6])(void)

int MAIN(int N)
{
    fun[0] = func0;
    fun[1] = func1;
    fun[2] = func2;
    fun[3] = func3;
    fun[4] = func4;
    fun[5] = func5;

    fun[N];
}


第二个问题, 想了想没有什么思路,大家有什么高见啊?
其中N== 33 N==67 后面的值是我自己瞎编的!!!忘了。
但我想和这个值应该没什么关系。 我搞不懂他要考的是什么?
有什么东西可以不用判断,就可以选择执行的,而且效率还高?

[ 本帖最后由 _mystic 于 2009-8-5 14:15 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-08-05 14:16 |显示全部楼层

回复 #2 青菜吃蟲 的帖子

啊!! 建立一个500多的数组??

论坛徽章:
0
3 [报告]
发表于 2009-08-05 15:17 |显示全部楼层

回复 #4 epegasus 的帖子

嗯 有可能! 呵呵 不过这样的话,这个公司够无聊的了!等于前面的问题再加个小学数学!~
不过,我想他应该想问的不单单是这个~  C语言里有没有一个执行这种判断时效率很高的方法哪?

论坛徽章:
0
4 [报告]
发表于 2009-08-05 15:18 |显示全部楼层
原帖由 DQP 于 2009-8-5 14:23 发表

很有可能是跟数字有关的
33 % 33 == 0
67 % 33 == 1
估计题目是让你建立一个简单的hash



这样的效率会高吗,比起用函数指针数组?

论坛徽章:
0
5 [报告]
发表于 2009-08-05 15:56 |显示全部楼层
呵呵 不过函数指针确实要比if去一个个判断要来的快啊

论坛徽章:
0
6 [报告]
发表于 2009-08-05 16:20 |显示全部楼层
原帖由 虑而后能得 于 2009-8-5 16:19 发表
main函数中可以有参数int n 吗 第一次见到啊


呵呵 你看错了~ 是MAIN函数, 不是mian....

论坛徽章:
0
7 [报告]
发表于 2009-08-06 00:35 |显示全部楼层
原帖由 mjus 于 2009-8-5 22:30 发表
void (*fun[8])(void);
index=hash=N%10;
set fun[2]=fun[5]=NULL

done !


我看的有点晕。。。解释一下,可以吗?

论坛徽章:
0
8 [报告]
发表于 2009-08-07 16:50 |显示全部楼层
原帖由 mjus 于 2009-8-6 02:56 发表
OK. see
N=33,   index=hash=33%10=3
N=67,   index=hash=67%10=7
N=150  index=hash=150%10=0
N=274  index=hash=274%10=4
N=331  index=hash=331%10=1
N=556  index=hash=556%10=6


fun[0]=[150%10 ...


嗯 好像明白了~~
要是对10取余后,有两个一样的怎么办?
33%10 = 3
要是还有有93哪? 93 % 10 = 3
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP