智力题每题10分,很凶险
题目一:有20张上下表面光滑的扑克牌,其中有8张向上,要求你闭着眼睛且不借助任何工具把这20张扑克牌分成两堆,使得每堆向上的扑克牌的数目一样多。
解决方法:从20张扑克牌中拿出8张,并把8张扑克牌翻过来,这样两堆扑克牌向上的扑克牌数目就一样多了。
证明:
假如从20张扑克牌抽出的8张中有N张向上的扑克牌(N>=0&&N<=8)翻过来后有8-N张向上的扑克牌,
因为总共只有8张向上的扑克牌,被抽出N张向上扑克牌后,剩下8-N张向上的扑克牌,故另一堆向上的扑克牌数为8-N;
由此证明两堆向上的扑克牌数一样多。
题目二:把一个钝角三角形如何切割成最少数量的锐角三角形?
解决方法:作三角形的角平分线交于一点(内心),以内心到钝角的点为半径画圆,然后连接圆心与交点,相邻的交点也相连,这样就可得到7个锐角三角形。
1.不用第三个变量,写swap函数,交换两个变量的值。
2.几个sizeof,包括指针,数组,malloc出的堆空间,通过函数传递的数组形参,结构体
3.考了两个stl,一个序列容器找错的,一个map容器写输出结果的
序列容器的错误是迭代器失效,map容器考的很简单
4.struct {
int a;
char b;
long c;
short d;
short e[5];
}*p;
p=0x1000000;
p+0x200=?
(unsigned long*)p+0x200=?
(unsigned char*)p+0x200=?
5.改错
char c[5],*p;
int array[100];
int **p;//改为int (*p)[5]
p = &array;
6.写出输出
#include <iostream>
using namespace std;
//函数功能:判断i的二进制表示中1的个数
int fun1()
{
int i = 5;//原题不是15,貌似是1000
int num = 0;
while (i != 0)
{
i = i & (i - 1);
num++;
}
return num;
}
//无论i是多少,都返回2
int fun2()
{
int i = 15;
int num = 0;
while (i != 0)
{
i = i && (i - 1);
num++;
}
return num;
}
int main()
{
cout << fun1() << endl
<< fun2() << endl;
return 0;
}
7.其他题目很简单,没有数据库,没有复杂算法(第二轮笔试有算法,我的资源有下载)
最后祝福各位都能找到好工作~~!o(∩_∩)o
- 1
- 2
- 3
- 4
- 5
前往页