uicccui 2021-11-30 19:04 采纳率: 42.9%
浏览 81
已结题

完全二叉树-最近公共祖先

题目描述

如下图,由正整数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)。

img

输入描述

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

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

2
10 4
7 13

输出样例

2
3

#include<iostream>
using namespace std;
const int N=15;
int a[N],b[N];
int main()
{
    int n;
    cin>>n;
    for(int p=0;p<n;p++){
    
       int x,y,i=0,j=0;
       cin>>x>>y;
       if(x==y) cout<<x<<endl;
       else{
         while(x!=1){
            a[++i]=x;
            x/=2;
            }
          a[++i]=1;
          while(y!=1){
            b[++j]=y;
            y/=2;
           }
          b[++j]=1;
          
          for(x=1;x<=i;x++){
          
            for(y=1;y<=j;y++){
            
                if(a[x]==b[y])
                {
                    cout<<a[x]<<endl;
                    break;
                }
            }
            if(a[x]==b[y]) break;
         }
        
        }
    }
    return 0;
}

多组数据时(n=4000)测试“502 4”这组数据实际输出错误31(应为1)
但单独测试是对的
请问错在哪儿了

  • 写回答

1条回答 默认 最新

  • togolife 2021-11-30 23:50
    关注

    第36行有问题。如果y > j,再判断a[x] == b[y]就没啥意义了。
    输出错误31应该是多组数据时其他用例影响的结果。

    评论

报告相同问题?

问题事件

  • 系统已结题 12月8日
  • 修改了问题 11月30日
  • 修改了问题 11月30日
  • 修改了问题 11月30日
  • 展开全部

悬赏问题

  • ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)
  • ¥15 matlab代码 关于微分方程和嵌套的分段函数。
  • ¥15 把VMware项目复制到另一台电脑
  • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
  • ¥15 求caverdock使用教程
  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密