soj 2543 完全二叉树

1000. 完全二叉树 
 
Total:338Accepted:81
 
   
   
  Time Limit: 1sec    Memory Limit:256MB Description

如下图,由正整数1,2,3,...组成一棵无限大的满二叉树。从某一个结点到根结点(编号是1的结点)都有
一条唯一的路径,比如10到根节点的路径是(10,5,2,1),由4到根节点的路径是(4,2,1),从根结点1到根结点
的路径上只包含一个结点1,因此路径是(1)。
对于两个结点X和Y,假设它们到根结点的路径分别是(X1,X2,...,1)和(Y1,Y2,...,1)(这里显然有X=X1,Y=Y1),
那么必然存在两个正整数i和j,使得从Xi和Yj开始,有Xi=Yj,Xi+1=Yj+1,...,现在的问题就是,给定X和Y,
要求Xi(也就是Yj)。

                1
        2                 3
    4       5        6        7
  8   9  10   11  12   13  14   15
... ... ...  ...
 

Input

输入的第一行是一个整数T,表示测试用例个数。以下T行,每行对应一个测试用例。
每个测试用例包括两个整数X和Y,这两个整数都不大于1000。
 

Output

对每个测试用例,单独一行输出一个整数Xi。
 

Sample Input 《soj 2543 完全二叉树》 Copy sample input to clipboard

1
10 4
7 13

Sample Output

2
3

 

#include<iostream>
using namespace std;

int main()
{
	int n;
	cin>>n;

	while(n--)
	{
		int x, y;
		cin>>x>>y;

		while(x!=y)
		{
			if(x>y)
				x/=2;
			else y/=2;
		}

		cout<<x<<endl;
	}

	return 0;
}

  

    原文作者:KennyRom
    原文地址: https://www.cnblogs.com/KennyRom/p/6208972.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞