冕临


私信TA

用户名:1901010094

访问量:1405

签 名:

等  级
排  名 5201
经  验 1578
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 北京师范大学珠海分校
专  业

  自我简介:

TA的其他文章

解题思路:
题目其实是层层递进的关系,就是先找到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分

1 人评分

  评论区

  • «
  • »