摘要:
一个由inline引起的讨论以下函数定义有问题么://function.hVoid hello(){ Printf(“hello,world”);}一般人看起来肯定觉得不对,因为我们基本上只把函数定义放在cpp里面,然后定义一个.h声明一下,在使用的地方include 一下这个.h就Ok了。可是为什么要这样做呢?换句话说,如果我们按上面的方法定义hello(在一个.h里面定义),然后在两个文件a.cpp和b.cpp里面同时include了它,然后我们编译的时候没错,链接的时候告诉我们hello被定义了两次,这是为什么呢?我们要知道,你include一个文件的时候相当于把那个文件的内容copy到 阅读全文
摘要:
编程之美上面有个NIM的游戏,规则如下:有n堆石头,两个人轮流从中取,一次只能在一堆中取,至少取一个,最多把这一堆取完,取得最后一个石头的人胜利,问谁有必胜策略。解: 设这n堆石头的个数分别是X1,X2……Xn,设F(X)= X1 ^X2 ^ X3……^Xn。如果F(X)= 0则后取的获胜,否则,先取的获胜。证明: 如果这剩下的石头的个数的的异或值为0,则无论从一堆中取多少个,取完之后剩下的异或值一定不是0,反之,如果异或值不为0,那么一定可以从一堆中取一些,从而使取完之后的异或值为0.但是,有一个似乎更难的题目,就是有n堆石头,两个人轮流从中取,一次只能在一堆中取,至少取一个,最多把这一堆取 阅读全文
摘要:
对于生成n个数的排列,我们大家肯定都知道一种回朔的解法,这种解法就是根据8皇后得来的,当然,需要把冲突条件改一下就行.然而,我们现在要提的是另外一种方法,就是通过定义去写的一种算法. 显然,1的排列就是1;1,2的排列有1,2和2,1两个;现在我们考虑1,2,3这三个数的排列,显然,1,2,3这三个数的排列其实就是分以下三种情况: 1)把1放在第1位,剩下的就是2,3的两个数排列 2)把2放在第1位,剩下的就是1,3两个数排列 3)把3放在第1位,剩下的就是1,2两个数的排列 这种思想其实就是我们通常写出n个数的排列的一种思考过程,当然,对于n个数我们也可以考虑分成n种... 阅读全文