【腾讯笔试题目解析】
1. **数学问题**:在给定的问题中,A 知道两个数字之和,B 知道它们的乘积。起初,A 说不知道这两个数是什么,但后来 B 说他也无法确定。接着,A 宣布他知道答案,B 也跟着知道了答案。这个问题可以通过排除法解决。如果两个数相加是 1-20 之间的数,而乘积是已知的,最可能的情况是 1 和 2(因为它们的乘积是 2,A 看到的是这个乘积),但是 A 初次不知道答案,说明不是唯一解。当 A 知道答案时,B 也应该知道。唯一满足条件的数对是 2 和 3,因为它们的乘积是 6,而和是 5。当 A 看到和为 5 时,他可以确定这两个数是 2 和 3,因为没有其他数对的乘积是 6 且和是 5。
2. **概率问题**:一个家庭有四个人(爸爸、妈妈、妹妹、小强),他们每个人的生肖可能是 12 种之一。问至少两个人生肖相同的概率是多少?可以通过计算没有人生肖相同的概率然后用 1 减去得到至少两个人相同的概率。概率计算公式是 (12*11*10*9)/(12^4),然后 1 减去这个概率得到 41/96。
3. **位运算**:计算 a^b << 2,这里的运算符优先级是关键。位左移 "<<" 优先级高于按位异或 "^",所以先进行 b 的左移操作,即 b * 4,然后与 a 进行异或。例如,当 a = 6, b = 4 时,a^b << 2 = 224。
4. **预定义宏**:在 C/C++ 编程中,可以使用预定义宏来获取当前文件名和行号,如 `__FILE__` 和 `__LINE__`。例如,`printf("The file name: %s, The current line No: %d", __FILE__, __LINE__)` 可以输出文件名和当前行号。
5. **数组和指针**:对于数组 a[3][4],表示方式的正确性需要了解指针运算。*(&a[0][0]+5)、*(a+1)+1、*(&a[0][0]+4) 都是正确的,但 *(&a[1]+1) 是错误的,因为它试图取 a[1] 的地址加 1 的位置,而 a[1] 已经是 a[1][0] 的地址了。
6. **函数参数**:fun((exp1,exp2),(exp3,exp4,exp5)) 有两个实参,逗号表达式被视为单个表达式,所以每个括号内的表达式组合被视为一个整体。
7. **排序算法**:在平均速度方面,希尔排序、冒泡排序、快速排序和插入排序中,快速排序通常是最快的,它的平均时间复杂度为 O(n log n)。
8. **枚举类型**:C/C++ 中,可以使用 `enum` 关键字声明枚举类型,如 `enum weekday {sunday, monday, tuesday, wednesday, thursday, friday, saturday}`。
9. **数据结构选择**:频繁的插入删除操作,使用链表更合适,因为链表在插入和删除操作上的时间复杂度为 O(1),而数组则需要移动元素。
10. **指针和内存管理**:*p=NULL 和 *p=new char[100] 的 sizeof(p) 都为 4,因为它们代表的是指针本身的大小,与指针指向的数据无关。
11. **顺序查找的时间复杂度**:顺序查找的平均时间复杂度为 (n+1)/2。
12. **循环计算**:for(i=0,sum=0; i<10; ++i,sum+=i) 的运行结果是 sum = 55,因为 sum 会累加 i 的值直到 i=9。
13. **switch 语句**:switch 语句的参数不能是浮点型,只能是整型、字符型或枚举型。
14. **交换整数**:交换两个整数 a 和 b 的值,不使用额外变量,可以采用 x = x + y; y = x - y; x = x - y 的方法。
15. **浮点数比较**:在浮点数比较中,考虑到浮点数精度问题,可以使用一个很小的正数作为容差,例如 `(x >= 0.000001 && x <= -0.000001)` 表示 x 不为 0。
16. **SQL 操作**:
- (1) 创建表的 SQL 语句是 `CREATE TABLE tableQQ (ID NUMBER(12) NOT NULL, Nickname VARCHAR2(30) NOT NULL);`
- (2) 查询昵称为 'QQ' 的用户,按 ID 降序排列:`SELECT * FROM tableQQ WHERE Nickname = 'QQ' ORDER BY ID DESC;`
- (3) 删除 ID 为 1234 的用户记录:`DELETE FROM tableQQ WHERE ID = 1234;`
- (4) 添加 ID 为 5555,昵称为 '1234' 的记录:`INSERT INTO tableQQ VALUES (5555, '1234');`
以上是对腾讯笔试中出现的若干题目及其解答的详细解析,涵盖了数学、算法、编程语言和数据库等多个知识点。这些题目旨在考察应聘者的逻辑思维能力、编程基础和问题解决能力。