Description
Input
Output
Sample Input
5 1 2 2 3 4 3 1024 2048 3214567 9998877
Sample Output
1 2 3 1 44
此题要求在一个二叉树中寻找两个数的最短路径,可知每个数都是同一个母数向下分裂;
所以只要找到两个数最近的母数就可的两数之间的最短路径;
只需每次对较大的数除以二即可;
AC代码:
#include <iostream>
#include<algorithm>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
struct A{
char a[1100];
char b[1100];
}a;
int main()
{
int i,j,k,n,m,x,y,b,c,d,e,t;
char a[110][110];
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
scanf("%d%d",&x,&y);
for(m=0;x!=y;m++)
{
if(x>y)
x/=2;
else if(y>x)
y/=2;
}
printf("%d\n",m);
}
}
return 0;
}