`
444878909
  • 浏览: 639209 次
文章分类
社区版块
存档分类
最新评论

腾讯面试题(持续更新ing)

 
阅读更多

1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句

答案:#define compare(a, b) ( (a) - (b) & (1 << sizeof(int) * 8 - 1) ? (a) : (b))

解析:这里的做法,是将a - b,然后看首位是1,还是0,然后返回大的那个值。当然,你要是返回1跟0也是对的。

如果这道题写成这样,#define comapre(a, b) ( ((a) + (b)) - abs((a) - (b)) / 2 ) 你认为可行不?答案是否定的,只要a,b其中有一个数是无符号的,a - b 就会变成一个非常大的数,结果就会错得离谱。

2、如何输出源文件的标题和目前执行行的行数

答案:cout << __FILE__ << " " << __LINE__; 还有几个常用的宏,__DATE__, __TIME__, __FUNCTION__, 注意__DATE__和__TIME__是预编译的结果,也就是说,是你这个文件编辑后被重新编译的日期和时间,日期类似于Mar 16 2013 时间则是hh:mm:ss 如 08:42:39,__FUNCTION__则是对应函数的函数名,还有个很少用的宏__VA_ARGS__,这是不定参数的参数列表,也就是fun(...)中的那个...,如果你想把一个函数的可变参数...传递给另外一个函数时,就可以使用这个宏,但是,这个宏只是C99支持,现在的VS2008也还支持,但g++不支持,so,你懂的,少用为妙

3、两个数相乘,小数点后位数没有限制,请写一个高精度算法

答案:参考:http://blog.csdn.net/dssdss123/article/details/8765159

解析:参考的网址没有设计小数位,但原理是一样的,如果下次有涉及小数,会及时更新

4、写一个病毒程序

答案:参考:http://blog.csdn.net/dssdss123/article/details/8710560

5、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过。请问,如何安排,能够在17分钟内这四个人都过桥?

答案:AB一起过桥,耗时=2,A回来,耗时=2+1=3,CD一起过桥,耗时=3+10=13,B回来,耗时=13+2=15,AB一起过桥,耗时=15+2=17

6、一个人上台阶,一次可以上一个台阶或者两个台阶,问,上到10个台阶有多少种走法?

答案:89

解析:

上第一个台阶,只有一种走法,L1 = 1

上第二个台阶,有两种走法,可以直接上两个台阶,也可以从第一个台阶走一步,L2 = L1 + 1 = 2

上第三个台阶,可以从第一个台阶走两个台阶,也可以从第二个台阶走一个台阶,也就是,走到第一个台阶的所有方法,再加上走到第二个台阶的所有方法,L3 = L1 + L2= 1 + 2 = 3

上第四个台阶,可以从第二个台阶走两个台阶,也可以从第三个台阶走一个台阶,也就是,走到第二个台阶的所有方法,再加上走到第三个台阶的所有方法,L4 =L2 + L3 = 2 + 3 = 5

上第五个台阶,可以从第三个台阶走两个台阶,也可以从第四个台阶走一个台阶,也就是,走到第三个台阶的所有方法,再加上走到第四个台阶的所有方法,L5 =L3 + L4 = 3 + 5 = 8

。。。。。。

后面的数等于前面两个数的和,这个是???哈,就是斐波那契数列哈,1,2,3,5,8,13,21,34,55,89,答案就是89。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics