摘要:
话说,一个圆形池塘,鸭子在池塘里,狐狸在岸边,鸭子只有游到岸边才能飞走,而狐狸想吃鸭子,但是狐狸又不会游泳,只能在岸上跑。狐狸在岸上奔跑的速度是鸭子在水里游的速度的4倍,问鸭子怎样才能飞走而不被狐狸吃掉,假设狐狸足够聪明。 一个可行的想法是,鸭子在池塘里面游小圈,而狐狸在岸上跑大圈,但是被鸭子越落越 阅读全文
摘要:
我想,很多的程序员都知道如何利用环形队列来避免使用锁。那就是,生产者只更改写指针,消费者只更改读指针。当然这里的指针一般可能是整数下标。例如:read_pos为消费者更改的读指针,每读走一个元素则read_pos=(read_pos+1)%SIZE,write_pos为生产者更改的写指针,每写完一个元素,write_pos=(write_pos+1)%SIZE,在消费者看来,只要队列不空,就可以读取当前读指针处的元素,在生产者看来,只要队列不满,就可以在当前的写位置上写一个元素。队列为空的条件为:read_pos=write_pos(对吗?)队列为满的条件为:(write_pos+1)%SIZ 阅读全文
摘要:
设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。下面利用牛顿迭代法求 阅读全文
摘要:
n个人围成一个圈报数,每次报到m的人从圈中退出,后面的人之后从0重新开始报数。设X是淘汰前的每个人的位置编号,X'是淘汰后形成的新的位置编号X X'------------m -> 0m+1 -> 1m+2 -> 2m+3 -> 3... ->...n-1 -> n-1-m0 -> n-m1 -> n-m+12 -> n-m+2... -> ....m-2 -> n-2非常明显的对应关系:x'=(x-m)%nx =(x'+m)%n例如对于n=5,m=3,位置编号0,1,2,3,40 1 2 3 4 阅读全文
摘要:
把B用二进制表示:例如假如:B=101011B=2^5+2^3+2^1+2^0A^B = A^(2^5) * A^(2^3) * A^(2^1) * A^(2^0)= A^(2^5+2^3+2^1+2^0)=A^B所以可以从B的低位开始,循环并计算A^(2^0), A^(2^1), A^(2^2)....同时,并且判断B的该位是否为1,如果为1,把当前计算的A^(2^i)累乘到结果中。int Func(int a, int b){ int p = a; int ans = 1; while(b) { if(b & 1) ans = (ans * p... 阅读全文