解题思路:
题目其实是层层递进的关系,就是先找到A的父亲,再找到A的父亲的父亲,再找到A的父亲的父亲的父亲,首先先初始一个计数器,从A出发,找到A的父亲的时候计数器加一,并且变量改变,改成找用A的父亲代替原本记录A的值,继续寻找已经替换值的父亲,也就是A的父亲的父亲,当已经遍历整个二维数组(输入的父子关系用列数为2的二维数组记录),也就是已经找不到当前A的值的父亲的时候,A的值就是代表了先祖,这时返回计数器的值,计数器的值代表了先祖跟一开始的A隔了几代,用相同的方法处理B,得到另一个计数器,题目说明A和B是家人,所以应该是存在一个共同的先祖(样例也存在),比较计数器的大小关系就能说明他们之间是长辈,兄弟还是后辈的关系,问题解决。

注意事项:
题目说明A和B的编号,也就是1和2,直接使用
参考代码:

import java.util.Scanner;

public class Main {
   public static int getsum(int num,int me,int [][]values,int length)
   {
       for(int i=0;i<length;i++)
       {
           if(values[i][0]==me)//检测出关系中存在这当前值跟关系中为儿子的值相同
           {
               me = values[i][1];//把当前值改为关系中为父亲的值,下一步循环找父亲的父亲
               num = num + 1;//计数器加一
           }
       }
       return num;
   }
   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       while (scanner.hasNext()) {
           int a = scanner.nextInt();
           int res[][]=new int[a][2];
           for(int i=0;i<a;i++)
           {
               res[i][0] = scanner.nextInt();
               res[i][1] = scanner.nextInt();
           }
           int numbera=getsum(0,1,res,a);//得到两个计数器
           int numberb=getsum(0,2,res,a);
           if(numbera<numberb)//直接进行比较
               System.out.println("You are my younger");
           else if(numbera==numberb)
               System.out.println("You are my brother");
           else
               System.out.println("You are my elder");
       }
   }
}


一开始本想用python写,但是因为超时一直交不上去,猜测是因为语言问题,众所周知python的运行时间很慢,所以换成java写,同样的思路java交上去了,python超时


Python代码

def getsum(num, me, values, length):
   for i in range(length):
       if values[i][0] == me:  #检测出关系中存在这当前值跟关系中为儿子的值相同
           me = values[i][1]  #把当前值改为关系中为父亲的值,下一步循环找父亲的父亲
           num = num + 1  #计数器加一
   return num
while True:
   try:
       a = int(input())
       res = []
       for i in range(a):
           x, y = map(int, input().strip().split())
           b = [x, y]
           res.append(b)
       numbera = getsum(0, 1, res, a)  #得到两个计数器
       numberb = getsum(0, 2, res, a)  
       if numbera < numberb:   #直接进行比较
           print("You are my younger")
       elif numbera == numberb:
           print("You are my brother")
       else:
           print("You are my elder")
   except:
       break

点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论