考察二叉树的性质。节点i,左孩子为2i,右孩子为2i+1; 同理,左节点2i和右节点2i+1的父节点为i,只要除2即可。 不停的将x,y中较大的那个除2,当二者相等时就找到了公共父节点。

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int x, y;
    while(cin >> x >> y){
    	if(x == 1 || y == 1){
    		cout << 1 << endl;
    		continue;
		}
		while(x != y){
			if(x < y)
				swap(x, y);
			x /= 2;
		}
		cout << x << endl;
	}
    return 0;
}