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

ZZULIOJ.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)
{
    int i,t;
    if(x==y) return x;
    else if(x>y) return common(x/2,y);//會繼續迴圈,相當於遞迴
    else return common(x,y/2);
}
int main()
{
    int x,y;
    scanf("%d%d",&x,&y);
    printf("%d",common(x,y));
    return 0;
}