#include "stdio.h"
int position(int,int);
int main(int argc, char const *argv[])
{
int p,q,pos,times;
printf("请输入数组的组数:");
scanf("%d",×);
while(times > 0)
{
printf("请输入p,q:");
scanf("%d %d",&p,&q);
pos = position(p,q);
printf("%d \n", pos);
times--;
}
return 0;
}
int position(int p,int q)
{
//printf("%d %d\n",p,q);//这个可以看到过程
if(p == q) return 1;
if(p > q)//右子树
{
return 2*position(p-q,q)+1;
}else//左子树
{
return 2*position(p,q-p);
}
}
//在主函数中调用position,可以得到相应地位置,简单的验证过,应该是正确的
//这个基本上涉及到了二叉查找树,子节点和父节点索引的关系: 2N,2N+1
//基本算法就是这样了,至于按你的要求输入多组数据,可以自己做了