题解 | #找出直系亲属#

找出直系亲属

https://www.nowcoder.com/practice/2c958d09d29f46798696f15ae7c9703b

#include <iostream>
using namespace std;
const int N = 30;
int son[N];
int find(int a, int b)
{
    int cnt = 0;
    while(a != son[a] && a != b)
    {
        a = son[a];
        cnt ++;
    }
    if(a == b) return cnt;
    return 0;
}
int main() {
    string s3 = "great-", s2 = "grand", s11 = "parent", s12 = "child", s1;
    int n, m;
    while(cin >> n >> m)
    {
        for(int i = 0; i < N; i ++) son[i] = i;
        while(n --)
        {
            char a, b, c;
            cin >> a >> b >> c;
            if(b != '-') son[b - 'A'] = a - 'A';
            if(c != '-') son[c - 'A'] = a - 'A';
        }
        while(m --)
        {
            char a, b;
            cin >> a >> b;
            int len = find(a - 'A', b - 'A');
            if(len) s1 = s11;
            else 
            {
                len = find(b - 'A', a - 'A');
                s1 = s12;
            }
            if(!len)
            {
                cout << '-' << endl;
                continue;
            }
            while(len)
            {
                if(len >= 3) cout << s3;
                else if(len == 2) cout << s2;
                else cout << s1 << endl;
                len --;
            }
        }

    }
    return 0;
    
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务