1110: 最近共同祖先(函式專題)
阿新 • • 發佈:2018-11-25
題目描述
如上圖所示,由正整數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; }