1. 程式人生 > >1110: 最近共同祖先(函式專題)

1110: 最近共同祖先(函式專題)

題目描述

如上圖所示,由正整數1, 2, 3, ...組成了一棵無限大的二叉樹。從某一個結點到根結
點(編號是1 的結點)都有一條唯一的路徑,比如從10 到根結點的路徑是(10, 5, 2, 1),
從4 到根結點的路徑是(4, 2, 1),從該結點到根結點的路徑上的所有結點稱為該結點的祖先。現在的問題就是,給定x 和y,求x和y的最近共同祖先,比如,10和4最近共同祖先是2,10和5的最近共同祖先是5。
定義遞迴函式
int common(int x, int y)
{
如果x==y, return x;
如果x>y,求x/2與y的共同祖先;
否則,求x與y/2的共同祖先;
}

 

輸入

輸入只有一行,包括兩個正整數x 和y,這兩個正整數都不大於1000。

 

輸出

輸出只有一個正整數,即x和y的最近共同祖先。

 

樣例輸入

10 4

 

樣例輸出

2
#include<stdio.h>

int common(int x, int y)
{
        if(x==y)

        return x;

        else if(x>y)
            common(x/2,y);  //求x/2與y的共同祖先;
        else
         common( x,y
/2); } int main() { int x,y; scanf("%d%d",&x,&y); int z=common(x,y); printf("%d",z); return 0; }