题目大概是有一颗无限深的满二叉树,从根节点为1开始编号,第二层为2、3,第三层为4、5、6、7以此类推。输入x、k代表节点序号和层数,输出x在k层上的祖先节点,如果不存在则输出-1,输入x、k之前需要询问要输入多少次。输入输出示例如下:
input:
4
10 1
10 2
10 3
10 4
output:
1
2
5
-1
以下是测试没有通过的代码:
#include<stdio.h>
int main()
{
int x,x1,k,k1,ceng=2,fceng,q,a[10000],z=0;
scanf("%d",&q);
for(int j=0; j<q; j++)
{
scanf("%d %d",&x,&k);
if(x==1) fceng=-1;
else
{
x1=x;
while(k1!=2&&k1!=3)
{
if(x1==2||x1==3) break;
else if(x1==1)
{
ceng--;
break;
}
else{
k1=x1/2;
x1=k1;
ceng++;
}
}
if(k>=ceng) fceng=-1;
else
{
fceng=x;
for(int i=0; i<ceng-k; i++)
{
fceng=fceng/2;
}
}
}
a[z]=fceng;
z++;
}
for(int i =0; i<q; i++)
{
printf("%d\n",a[i]);
}
}