`
java-mans
  • 浏览: 11448934 次
文章分类
社区版块
存档分类
最新评论

腾讯面试题—附答案

 
阅读更多

1. 1-20的两个数把和告诉A,积告诉B,A说不知道是多少,
B也说不知道,这时A说我知道了,B接着说我也知道了,问这两个数是多少?

2 爸爸,妈妈,妹妹,小强,至少两个人同一生肖的概率是多少?

3, 计算 a^b << 2

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

5 a[3][4]哪个不能表示 a[1][1]: *(&a[0][0] 5) *(*(a 1) 1) *(&a[1] 1) *(&a[0][0] 4)


6 fun((exp1,exp2),(exp3,exp4,exp5))有几个实参?


7. 希尔 冒泡 快速 插入 哪个平均速度最快?


8. enum的声明方式


9. 频繁的插入删除操作使用什么结构比较合适,链表还是数组?


10. *p=NULL *p=new char[100] sizeof(p)各为多少?


11. 顺序查找的平均时间


12. for(i=0,sum=0; i<10; i,sum =i);的运行结果


13. 不能做switch()的参数类型是:


14.不使用其他变量,交换两个整型a,b的值


15. 写出float x 与“零值”比较的if语句


=================================答案===================================

1.

答案:2和3 或 2和4(最下面有详解)

2.

答案:1-12*11*10*9/12*12*12*12 = 1-55/96 = 41/96

3.

答案:
运算符优先级:括号,下标,->和.(成员)最高;
单目的比双目的高;
算术双目的比其他双目的高;
位运算 高于 关系运算;
关系运算 高于 按位运算(与,或,异或);
按位运算 高于 逻辑运算;
三目的只有一个 条件运算,低于逻辑运算;
赋值运算仅比 , (顺序运算)高。
在此题中,位左移”<<” 优先级高于按位异或”^”,所以b先左移两位(相当于乘以4),
再与a异或。
例如: 当 a = 6; b = 4 时; 则 a^b<<2 = 22

4.

答案: printf(”The file name: %d\n”, __FILE__);
printf(”The current line No:%d\n”, __LINE__);
ANSI C标准预定义宏:
__LINE__
__FILE__
__DATE__
__TIME__
__STDC__ 当要求程序严格遵循ANSI C标准时该标识符被赋值为1
__cplusplus__ 当编写C 程序时该标识符被定义

5.

答案: *(&a[1] 1)
a是数组的首地址,a[1]就表示a[1][0]地址了,不用再取地址了。

6.

答案:两个。
形式参数:在声明和定义函数时,写在函数名后的括号中的参数。
实参是调用参数中的变量,行参是被调用函数中的变量。

7.

答案:快速排序
快速排序、归并排序和基数排序在不同情况下都是最快最有用的。


8.

答案:enum 枚举类型名 {
枚举常量1,
枚举常量2,

枚举常量n
};
For example:
enum weekday { sunday, monday, tuesday, wednesday, thursday, friday, saturda
y};
enum weekday week_day;//week_day 就是一个枚举类型变量


9.

答案:链表

10.

答案:都为4。因为都是指针类型,所占存储空间必然为4。

11.

答案:(1 2 3 … n)/n = (n 1)/2

12.

答案:sum = 55

13.

答案:switch的参数不能为浮点型。

14.

答案:x = x y; y = x-y; x = x-y

15.

答案:

if(x>=0.000001 && x<=-0.000001)(x不为0的比较)
float: 6位精度

double: 16位精度


第一题分析:
设和为S,积为M。
首先,A:我不知道。
说明:S可以分解成多个组合,而2=1+1,3=1+2,40=20+20,39=19+20,只有一种分解方式,因此S应属于[4,38]集合。
其次,B:我也不知道。
说明:M也可以分解成多个组合,因此M不是质数。
再者,A:我现在知道了。
说明:S分解方式中只有一个相乘之后是合数,其他分解方式相乘之后都是质数。这样,A才能根据B说不知道,而排出所有相乘是质数(M是质数,分解方式只有一种:1*质数)的可能,剩下的一个相乘之后是合数的组合就是A所得到的解。
而相乘之后是质数的:只有1*质数 = 质数!
1-20的所有质数:T = {2, 3, 5, 7, 11, 13, 17, 19}。
设x为T中的任意一个质数。那么,S的可能取值集合:{2+1, 3+1, 5+1, 7+1, 11+1, 13+1, 17+1, 19+1},即:SS = {3, 4, 6, 8, 12, 14, 18, 20}
S= 3时:3不在【4,38】集合,排除;
S= 4时:4=2+2=1+3,(2,2)相乘为4(非质数,满足条件),(1,3)相乘为3(质数,排除);
S= 6时:6=1+5=2+4=3+3,相乘分别为5,8,9,出现两个合数,排除;
其他值都是存在多个合数分解的情况,因此均排除了。
因此,A得到的解是2和2.
最后,B:我也知道了。
说明:B根据自己已知的M值,站在A的立场思考,能够获得M=4的结果,现在验证如下:
M=4=2*2=1*4,相加结果为4,5.而5不在SS集合之中,因此结果为2和2.
因此,最终答案为2和2.


以上给出的分析是假设这两个数是可以相同的。
如果认为这两个数不同,那又应该是哪两个数呢?
还是按照上面的步骤来进行分析:
首先,A:我不知道。
说明:S有多个分解方式。S属于【5,37】.
其次,B:我不知道。
说明:M有多种分解方式。
再者,A:我知道这两个数了。
说明:
S分解方式中只有一个相乘之后是合数,其他分解方式相乘之后的积仅有一种分解方式!这样,A才能根据B说不知道,而排出所有相乘是质数(M是质数,分解方式只有一种:1*质数)的可能,剩下的一个相乘之后是合数的组合就是A所得到的解。
那么,S的可能取值集合:{3,4,5,......,37}
S= 3时:3不在【5,38】集合,排除;
S= 4时:4=1+3,只有一种分解方式,排除;
S=5时:5=1+4=2+3,相乘分别为4,8,4=1*4仅有一种分解方式排除,8=1*8=2*4满足,得到一个解。
S= 6时:6=1+5=2+4,相乘分别为5,8,显然也满足。
其他值都是存在多个合数分解的情况,因此均排除了。
因此,解为2和3 或 2和4
最后,B:我也知道了。
说明:
B站在A立场得知结果。验证如下:
如果为2和3,则积为6,和为5。此时,5=1+4=2+3,4仅有一种分解方式,A能够确定为2和3;6=1*6=2*3,相加为7,5,此时7=1+6=2+5=3+4,相乘后为6,10,12,无法确定唯一解,舍掉1,6的解;而5=1+4=2+3,相乘后为4,6,舍掉4,有解2和3.
如果为2和4,则积为8,和为6.此时,6=1+5=2+4,5仅有一种分解方式,A能够确定为2和4. 8=1*8=2*4,相加为9,6,此时9=1+8=2+7=3+6=4+5,无法确定唯一解,舍掉1和8的解;而6=1+5=2+4,相乘后为5,6,舍掉5,有解2和4.
因此,最终解为2和3 或 2和4 。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics