一、C/C++(10道)
1、求输出
int a[]={1,2,3,4,5}
int*ptr = (int*)(&a+1)
class A{
virtual foo("A");
}
class B:A{
foo("B")
}
void func(A a){
a.foo();
}
void func1(A* ptr)
{
a->foo();
}
void func2(A &a)
{
a.foo()
{
B b;
func(b),func1(&b),func2(b);
}
3、
union u{
struct{
int a;
short b;
char c;
} s;
char d;
1、顶点度与边关系
2、2叉树前序中序求后序
3、双向链表插入新节点
4、AVL、B+、Hash常见应用
5、各种排序比较次数
三、大题
1、p()是一个概率生成器,有p的概率生成0,1-p的概率生成1,问如何实现g()生成均匀的0、1分布
2、给一个数组A[], 求输出Output[], Output[i]为所有A[]中元素乘积除了A[i],比如:A[10], 那么Output[3]=A[0]*A[1]*A[2]*A[4]*...A[9]
1、求输出
int a[]={1,2,3,4,5}
int*ptr = (int*)(&a+1)
printf("%d %d", *(a+1), *(ptr-1));
答:a与&a的地址是一个,&a的类型是int[5],所以打印结果为2、5
2、class A{
virtual foo("A");
}
class B:A{
foo("B")
}
void func(A a){
a.foo();
}
void func1(A* ptr)
{
a->foo();
}
void func2(A &a)
{
a.foo()
}
答:第一个调用A中foo,第二个根据ptr指向的类型来选择,第三个根据a所引用的类型来选择。 A、B、B。
int main(){
B b;
func(b),func1(&b),func2(b);
}
3、
union u{
struct{
int a;
short b;
char c;
} s;
char d;
};
求sizeof(u)
答:8
4、
class A{
virtual void print(int a=3)
{
printf("A=%d\n", a);
}
};
class B:public A
{
virtual void print(int b=5)
{
printf("B=%d\n",b);
}
};
int main()
{
A*ptr = new B();
ptr->print();
return 0;
}
求输出结果。
答:输出B=3。函数动态绑定,参数默认绑定。
二、数据结构(10道)1、顶点度与边关系
2、2叉树前序中序求后序
3、双向链表插入新节点
4、AVL、B+、Hash常见应用
5、各种排序比较次数
三、大题
1、p()是一个概率生成器,有p的概率生成0,1-p的概率生成1,问如何实现g()生成均匀的0、1分布
2、给一个数组A[], 求输出Output[], Output[i]为所有A[]中元素乘积除了A[i],比如:A[10], 那么Output[3]=A[0]*A[1]*A[2]*A[4]*...A[9]
要求不许用除法,在O(n)时间中算出Output[]
4、O(n)求数组中的众数
5、rand7()实现rand10()
总结:前面的几个语言题难度还是蛮大的,如果不使用很难理解。棋盘覆盖问题非常巧妙。
6、LCS最长公共子串