解题思路:
题目其实是层层递进的关系,就是先找到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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复