猴子分桃问题:
五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;.....其他几只猴子也都是 这样分的。问:这堆桃至少有多少个?(朋友说,这是小学奥数题)。http://blog.youkuaiyun.com/v_july_v/article/details/6803368
每个猴平均分成5份,都多1个
那就从别处再弄4个桃子来
这样,第一个猴分的时候,正好能分成5份
拿走1份(包括原来多的那个)以后,弄来的4个桃子还在,
这样以后每个猴子分的时候也正好能分成5份
5^5-4=3121个
2,数组的面试题目:http://www.cnblogs.com/graphics/archive/2010/08/24/1761620.html#link08
3,使用do while(0)把多条宏语句放在一起。http://chenshaochong1112.blog.163.com/blog/static/1707470472010899116427/
4,四种同步方式的区别:http://blog.youkuaiyun.com/renjwjx/article/details/3917407
5,理解递推(循环)和递归
走楼梯问题 / 费波纳茨序列:循环和递归写法,
int Fib(int n)
{
if (n <= 0)
return 1;
else if ( n==1 )
return 1;
return Fib(n-1) + Fib(n-2);
}
int table[100] = {0};
int Fib1(int n)
{
for (int i=2; i<=n; i++)
{
table[i] = table[i-1] + table[i-2];
}
return table[n];
}
long Fib2(int n)
{
long n1 = 1;
long n2 = 1;
for (int i=3; i<=n; i++)
{
int temp = n2;
n2 = n2 + n1;
n1 = temp;
}
return n2;
}
辗转相除求最大公约数
二叉树的遍历:先序,中序,后序,层次。递归非递归
递归和栈:
递归调用基于函数
6,整数拆分 4=1+1+1+1=1+1+2=1+3=2+2
整数因式分解:12 = 2*2*3 分解成质因数乘积。
7,后缀数组
求取:abcdcdabc中最长重复子串,abc。
abcdcdabc
bcdcdabc
cdcdabc
dcdabc
cdabc
dabc
abc
bc
c
8,字典树
http://kymowind.blog.163.com/blog/static/18422229720114264416738/
http://hi.baidu.com/sulipol/blog/item/ce9ae139e2ed39ffb311c7e0.html
9,求取数组中第二大元素,
1) 一次遍历O(n)
2) 建大顶堆,然后取第一个后调整大顶堆,O(n + lgn)
3) 建一个两个元素的小顶堆,O( 2n)
4) 分治思想,二分查找 O(n*lgn)
10,金条问题
你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。如果你只能将金条切割两次,你怎样分给这些工人?
切割两次,分出三块 1、2、 4。
第一天 付1
第二天 收回1,付2
第三天 付1(1+2)
第四天 收回1、2 付4
第五天 付1 (4+1)
第六天 收回1 付2(4+2)
第七天 付1 (4+2+1)
11,函数调用约定
http://www.cnblogs.com/StudyRush/archive/2011/03/06/1966553.html
http://hi.baidu.com/xy2401/blog/item/ac2a2e5ade3959cb9c8204c9.html
12,MFC消息机制:http://blog.163.com/zhoumhan_0351/blog/static/3995422720103821847339/,这篇博文中关于句柄和指针的讲解!
Win32的消息机制:http://www.cppblog.com/mzty/archive/2006/11/24/15619.html,这篇博文图画的不错。
13,句柄和指针
句柄是由系统分配的资源ID(我们认为它是一个标识某个系统资源的32位的整数),用于标识系统所分配的资源,这里的资源包含进程、线程等的广泛内容。句柄和指针都是地址。
句柄可以认为是某种意义上的指针,但不是指针;句柄是一些表的索引;也就是指向指针的指针(即二级指针),是windows系统在内存中维护的一个对象或一个窗口。因为以虚拟存储方式,需要调度页面,所以程序实际的物理地址是不断变化的,系统中用一个内存地址不变的表来维护这个变化的地址(进行登记),因此当访问到这个不变的表项时就能确定程序的物理地址(所以叫句柄为指向指针的指针。)
Win32里,句柄是指向一个“无类型对象”(void*)的指针,是一个4字节长的数据。
从构造上看,句柄是一个指针,尽管它没有指向用于存储某个对象的内存位置。事实上,句柄指向一个包含了对该对象进行的引用的位置。
句柄的声明是这样的:
typedef void *HANDLE
由于Windows是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本,这些运行的程序称为一个实例。为了对同一程序的多个副本进行管理,Windows引入了实例句柄。Windows为每个应用程序建立一张表,实例句柄就好象是这张表的一个索引。
不同在于:
1)句柄所指的可以是一个很复杂的结构,并且很有可以是与系统有关的,比如说上面所说的线程的句柄,它指向的就是一个类或者结构,他和系统有很密切的关系,当一个线程由于不可预料的原因而终止时,系统就可以回收它所占用的资源,如CPU,内存等;这个句柄中的某一些项,是与系统进行交互的。
2)指针也可以指向一个复杂的结构,但通常是用户定义的,所以必需的工作都要用户完成,特别是在删除的时候。
14,内核对象