|
|||||
|
|||||
1. 求职过程
2. 程序设计面试题的解答思路
对面试题不清楚的地方一定要问清楚,在编写代码的过程中应随时向考官解释你正在做的事情,写完程序后应该找例子验证自己写出来的代码,对解决方案的复杂性进行分析
3. 链表
P21头指针的修改,用c语言
//无法正确改变父函数里的指针
Int badinsert(element *head){
element *newelem;
……
head=newelem;
……
}
//正确的代码
Int insert(element **head){
element *newelem;
……
*head=newelem;
……
}
P49编写函数判定链表是否是循环链表
用快慢不同的指针对链表进行遍历,如果快指针到达链表尾则是非循环的,如果快指针超过慢指针,则是循环链表。
4. 树和图
5. 数组与字符串
6. 递归算法
面试例题 电话键单词
请编写一个函数,它以一个7位数的电话号码为输入, 把各种可能的“单词”--也就是能够用来代表给定 号码的字母组合--都打出来。因为电话上的“0” “1”按键上没有字母,所以你只需要把数字2-9转换 成字母。 *********************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #define PHONE_NUMBER_LENGTH 7
int COUNT = 0;
/********************************************* //它以一个电话键数字(0-9)和一个位置序号(1 2 3)为输入参数,返回该数字按键 //上指定序号相对应的字母。比如说,getCharKey(3, 2)将返回字母"E"--电话按键 //"3"上的字母是"DEF",而"E"正好是这几个字母当中的第二个 *********************************************/ char getCharKey(int telephoneKey, int place) { switch(telephoneKey) { case 0: return '0'; case 1: return '1'; case 2: if (place == 1) return 'a'; else if (place == 2) return 'b'; else return 'c'; case 3: if (place == 1) return 'd'; else if (place == 2) return 'e'; else return 'f'; case 4: if (place == 1) return 'g'; else if (place == 2) return 'h'; else return 'i'; case 5: if (place == 1) return 'j'; else if (place == 2) return 'k'; else return 'l'; case 6: if (place == 1) return 'm'; else if (place == 2) return 'n'; else return 'o'; case 7: if (place == 1) return 'p'; else if (place == 2) return 'r'; else return 's'; case 8: if (place == 1) return 't'; else if (place == 2) return 'u'; else return 'v'; case 9: if (place == 1) return 'w'; else if (place == 2) return 'x'; else return 'y'; default: return '#'; } } /*****************************************
非递归算法 *****************************************/ int printTelephoneWords1(int phoneNum[]) {
char results[PHONE_NUMBER_LENGTH + 1]; int x[PHONE_NUMBER_LENGTH]; int i; int level = 0; int count = 0; results[PHONE_NUMBER_LENGTH] = '/0';
for (i = 0; i < PHONE_NUMBER_LENGTH; i++)
x[i] = 0; while (level > -1) { x[level] += 1; if (x[level] < 4) { results[level] = getCharKey(phoneNum[level], x[level]); if (results[level] == '0' || results[level] == '1') { x[level] = 3; } if (level == PHONE_NUMBER_LENGTH - 1) { printf("%s/n", results); count++; } else { level++; x[level] = 0; } } else { level--; } } return count; } int main() { int str[PHONE_NUMBER_LENGTH]; str[0] = 4; str[1] = 9; str[2] = 7; str[3] = 1; str[4] = 9; str[5] = 2; str[6] = 7; //int count = printTelephoneWords1(str); //printf("count is %d/n", count); printTelephoneWords(str);
printf("count is %d/n", COUNT); return 0; } 7. 其他程序设计问题
面试例题:字节的升序存储和降序存储方式
字节的升序存储方案中最低位字节保存在最低位的地址里
字节的降序存储方案中最高位字节保存在最低位的地址里
以下函数升序返回1,降序返回0
Int endianness(void){
Int testnum=1;
Char *ptr;
Ptr=(char *)&testnum;
Return(*ptr);
}
Int endianness(void){
Union{
Int theinteger;
Char singlebyte;
}endiantest;
Endiantest.theinteger=1;
Return endiantest. singlebyte;
}
例题:请编写一个函数,把一个给定的整数的二进制表示形式的“1”的个数统计出来。
int NumOnesInBinary(int number) { int numOnes = 0; while (number) { number = number & (number - 1); numOnes++; } return numOnes; } 8. 与技术、测量、排序有关的智力题
9. 与图形和空间有关的智力题
一只狐狸在追一只鸭子,鸭子逃到了一个正圆形池塘的圆心位置.狐狸不会游泳,鸭子也不能在水面上起飞(这是一只有残疾的鸭子).狐狸的速度是鸭子的4倍.假设鸭子和狐狸分别遵循着最优的逃跑和追逐策略,请问:鸭子能不能安全地游到池塘边并起飞?如何能,怎么样才能做到?
设大圆半径为R
二小圆的半径分别为(4-∏)R/4 和R/4,化简后约为0.21~0.25R 逃生方法:鸭妹在红色区间作圆周运动,狐兄亦在岸上作圆周运动(假设起跑时鸭与狐在同一直径上且距离最近),当鸭看到自已经过圆心与岸上的狐成一直线时,立即改变方向沿着半径的方向向岸上游去。 10. 计算机基础知识
11. 非技术问题
附录.写个人简历的方法
|
|||||
|
|||||
|
|||||