函数引发二级叉的结算

bool is_left( int n  )//是否为左节点

{

return n % 2 == 0;

}

bool is_right( int n )//是否为右节点

{

return 0 != n && ! is_left( n );

}

int father( int n  )//父亲节点

{

if ( 1 == n ) return -1;

return n / 2;

}

int left_most( int n ) //得到节点n同层里最左边的点

{//这个你稍微推算一下就好,嗯

int res =1;

while ( n > 1 )

{

n /= 2;

res *= 2;

}

return ;

}

int common_ancestor( int n , int m ) //得到m和n的共同祖先,

{

if ( m == n )

return m;

if ( m != n && m == 0 || n == 0 )

return 0;//不存在共同祖先

return common_ancestor( father ( m ) , father( n )  ) ;

}

函数引发二级叉的结算

时间: 2024-10-10 09:44:47

函数引发二级叉的结算的相关文章

二级叉的结算另一种方法

1:每一个实体会员必须有一个属性,该属性用来存放与该会员在一条线上的所有父节点的用户名.用途:通过父节点查找改父节点左右两端的用户数量,然后根据人数来进行奖金的结算,同时提供该用户层奖. 2:每一个会员必须有一个属性存储该会员所处的层数,层数是从1开始的,用途,统计该层应该具有的会员人数,根据人数来确定是否给用户提钱. 3:每一个会员必须有一个属性存储该会员在该层所处的位置,以便结算时确定该用户所在的区域,左区域还是右区域,这一点很重要,如果没有该属性,前面所有的都是没有用的. 4:根据该会员所

【C/C++】Linux下system()函数引发的错误

http://my.oschina.net/renhc/blog/54582 [C/C++]Linux下system()函数引发的错误 恋恋美食  恋恋美食 发布时间: 2012/04/21 11:33 阅读: 11393 收藏: 21 点赞: 8 评论: 4 今天,一个运行了近一年的程序突然挂掉了,问题定位到是system()函数出的问题,关于该函数的简单使用在我上篇文章做过介绍: http://my.oschina.net/renhc/blog/53580 先看一下问题 简单封装了一下sys

一个截取字符串函数引发的思考

背景 前些天,遇到这样一个问题,问题的内容如下: 要求编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串.但是要保证汉字不被截半个,如"我ABC", 4,截取后的效果应该为"我AB",输入"我ABC汉DEF", 6,应该输出为"我ABC",而不是"我ABC+汉的半个". 问题 刚看到这个问题的时候,以为还是很简单的,但写出来之后,发现并不是想要的效果.回想一下当时的思路,就发现刚开

一个Sqrt函数引发的血案

我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢? 虽然有可能你平时没有想过这个问题,不过正所谓是"临阵磨枪,不快也光",你"眉头一皱,计上心来",这个不是太简单了嘛,用二分的方法,在一个区间中,每次拿中间数的平方来试验,如果大了,就再试左区间的中间数:如果小了,就再拿右区间的中间数来试.比如求sqrt(16)的结果,你先试

【转载】一个Sqrt函数引发的血案

转自:http://www.cnblogs.com/pkuoliver/archive/2010/10/06/sotry-about-sqrt.html 源码下载地址:http://diducoder.com/sotry-about-sqrt.html 好吧,我承认我标题党了,不过既然你来了,就认真看下去吧,保证你有收获. 我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这

Linux下system()函数引发的错误

先看一下问题 简单封装了一下system()函数: 1 int pox_system(const char *cmd_line) 2 { 3     return system(cmd_line); 4 } 函数调用: 1 int ret = 0; 2 ret = pox_system("gzip -c /var/opt/I00005.xml > /var/opt/I00005.z"); 3 if(0 != ret) 4 { 5     Log("zip file fa

对线程等待函数pthread_join二级指针参数分析

分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地址.一级指针承接的话就是这个地址. 那既然二级指针保存了,我们如何访问那?开始我觉得直接来个二级指针,然后*访问算了,但是下面的东西.让你不能那么干了!其实非要那样也可以 malloc呗! 线程创建函数pthread_create的函数原型如下: int pthread_create(pthread

由项目中一个hash2int函数引发的思考

hash2int /** * 计算一个字符串的md5折算成int返回 * @param type $str * @return type */ function hash2int($str) { $md5str = md5($str, true); $one = unpack('l', substr($md5str, 0, 4)); $two = unpack('l', substr($md5str, 4, 4)); $three = unpack('l', substr($md5str, 8,

一个数据交换函数引发的思考

近日,在书中看到一个关于数据交换函数的源代码,发现挺有意思,具体代码如下: 1 void swap(int* a, int* b) 2 { 3 *a ^= *b ^= *a ^= *b; 4 } 根据 C 语言异或赋值操作符(^=)的计算规则和异或运算符(^)的运算法则,应按照从右到左的顺序进行计算,具体计算过程演示如下: 1 *a = *a ^ *b; 2 *b = *b ^ *a = *b ^ ( *a ^ *b ) = *a; //将式1代入 3 *a = *a ^ *b = ( *a ^