解题思路:
题目其实是层层递进的关系,就是先找到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语言代码)浏览:1058 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:641 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:691 |
简单的a+b (C语言代码)浏览:753 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:705 |
众数问题 (C语言代码)浏览:911 |
【偶数求和】 (C语言代码)浏览:588 |
WU-拆分位数 (C++代码)浏览:819 |
校门外的树 (C语言代码)浏览:733 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:583 |