1. 字节对齐问题: sizeof(Student)=24(求解释,为什么不是20)
struct Student
{
int a; int b; double c; int d;
} ;
2. 高度为h的二叉树,其节点的度要么为0要么为2,问树中节点的最多最少(忘记了)的个数(树的节点的度是指该节点的子树的个数,也就是出度的数值,故最少为2^h+1, 最多为2^(h+1) -1)
3. 1024!的末尾0的个数,详细分析见http://bbs.chinaunix.net/thread-926848-1-1.html
4. 给定IP:10.23.24.29和子网掩码255.255.255.224,求跟该IP属于同一子网的IP地址(10.23.24.30)
5. 某一系统有5台绘图仪,现系统中有多个线程,每个线程需要两台绘图仪,现问至多可以给几个线程分配绘图仪而不发生死锁?(答案为4)
6. 不记得了
7. 百度首页输入搜索字符时会出现提示,问后台采用的是何种数据结构(感觉应该是哈希表)
8. 给定一个整数,将其奇数位比特和偶数位比特交换(思路:将该整数左移一位,后与10101010进行&运算后,就将原来的整数中的偶数位bit移动到了奇数位并且结果的偶数为全部为0; 将该整数右移一位后,与01010101进行&的运算,原奇数位移动到了偶数位并且奇数位全部为0;将前两步得到的结果进行|运算,即为最终结果)
9. 一下代码的输出
string c1("Ininiitt");
string c2("sdssdsdsd");
string& c3 = c1;
string* c4 = &c2;
c3=c2;
cout<<c2<<endl;
c4=&c1;
cout<<*c4;
结果:sdssdsdsd sdssdsdsd
10. 给定一段字符串,里面包含n个单词,单词与单词之间以空格分开,请将该字符串中单词逆置("this is a test"==》"test a is this“,不能使用字符串函数)求高效省空间算法
先将所有的字符串逆置,然后再针对每个单词逆置
void reversestr(char * str, int lenth)
{
int half = lenth / 2;
int i = 0, j = lenth-1;
char temp = '\0';
while(i < half)
{
temp = str[i];
str[i++]=str[j];
str[j--]=temp;
}
}
void reverseSentence(char* str)
{
if(str == NULL || (*str) == ' ') return;
int lenth = strlen(str);
reversestr(str, lenth);
char* first=str, *second=str;
while(*second !='\0')
{
if(*second==' ')
{
reversestr(first,second-first);
while((*second)==' ') second++;
first = second;
}
second++;
}
reversestr(first, second-first);
}