免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 28998 | 回复: 35
打印 上一主题 下一主题

[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:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2009-08-05 14:16 |只看该作者

回复 #2 青菜吃蟲 的帖子

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

论坛徽章:
0
4 [报告]
发表于 2009-08-05 14:22 |只看该作者
原帖由 _mystic 于 2009-8-5 14:16 发表
啊!! 建立一个500多的数组??

33=32+1
67=64+3
也许后面的值都比较特殊呢?

论坛徽章:
0
5 [报告]
发表于 2009-08-05 14:23 |只看该作者
第二个问题, 想了想没有什么思路,大家有什么高见啊?
其中N== 33 N==67 后面的值是我自己瞎编的!!!忘了。
但我想和这个值应该没什么关系。 我搞不懂他要考的是什么?
有什么东西可以不用判断,就可以选择执行的,而且效率还高?

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

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2009-08-05 14:30 |只看该作者
原帖由 _mystic 于 2009-8-5 14:16 发表
啊!! 建立一个500多的数组??



也未尝不可呀,简单明了

论坛徽章:
0
7 [报告]
发表于 2009-08-05 15:17 |只看该作者

回复 #4 epegasus 的帖子

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

论坛徽章:
0
8 [报告]
发表于 2009-08-05 15:18 |只看该作者
原帖由 DQP 于 2009-8-5 14:23 发表

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



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

论坛徽章:
0
9 [报告]
发表于 2009-08-05 15:22 |只看该作者

回复 #8 _mystic 的帖子

就是多了一步

  1.     fun[0] = func0;
  2.     fun[1] = func1;
  3.     fun[n % 33];
复制代码

论坛徽章:
0
10 [报告]
发表于 2009-08-05 15:32 |只看该作者
大家想得太简单了,如果是N==99呢,那执行哪一个?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP