1053: You are my brother

本文介绍了一道关于通过递归算法确定两个角色间家族关系的编程题。通过输入父子关系数据,程序能判断两者是否为兄弟、长辈或晚辈。文章提供了C++实现代码,并附带了解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 76   Solved: 12
[ Submit][ Status][ Web Board]

Description

Little A gets to know a new friend, Little B, recently. One day, they realize that they are family 500 years ago. Now, Little A wants to know whether Little B is his elder, younger or brother.

Input

There are multiple test cases.

For each test case, the first line has a single integer, n (n<=1000). The next n lines have two integers a and b (1<=a,b<=2000) each, indicating b is the father of a. One person has exactly one father, of course. Little A is numbered 1 and Little B is numbered 2.

Proceed to the end of file.

Output

For each test case, if Little B is Little A’s younger, print “You are my younger”. Otherwise, if Little B is Little A’s elder, print “You are my elder”. Otherwise, print “You are my brother”. The output for each test case occupied exactly one line.

Sample Input

5
1 3
2 4
3 5
4 6
5 6
6
1 3
2 4
3 5
4 6
5 7
6 7

Sample Output

You are my elder
You are my brother

这个是找代的问题,
比如,对于第二组数据,
1的父亲是3,再找3的父亲是5,再找5的父亲是7,共3代。
同理,2的父亲是4,4的父亲是6,6的父亲是7,共3代,
因此1和2是兄弟!
是不是挺简单的?呵呵!下面看代码吧!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
 
using namespace std;
#define MAX_LEN 2002
 
int main()
{
     int a=0, b=0;
     int n=0, count;
     int arr[MAX_LEN];
     int cnta, cntb;
     int i, j;
 
     //for (i = 0; i < MAX_LEN; i++)
       //  arr[i] = 0;
 
     while (cin >> n)
     {
         for (i = 0; i < MAX_LEN; i++)
           arr[i] = 0;
 
         count = 0;
         while (count < n)
         {
             cin >> a >> b;
             //if (a == b)
              //  break;
             arr[a] = b;
             count++;
         }
 
         //*************************
         cnta = 0;
         cntb = 0;
          i = 1;
         while (arr[i] > 0 )
         {
             cnta ++;
             i = arr[i];
         }
 
         i = 2;
         while (arr[i] > 0 )
         {
             cntb ++;
             i = arr[i];
         }
 
         if (cnta == cntb)
         {
             cout << "You are my brother" << endl;
         }
         else if (cnta > cntb)
         {
             cout << "You are my elder" << endl;
         }
         else if (cnta < cntb)
             cout << "You are my younger" << endl;
 
     }
     return 0;
}
 
/**************************************************************
     Problem: 1053
     User: 1006440533
     Language: C++
     Result: Accepted
     Time:100 ms
     Memory:1272 kb
****************************************************************/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值