[编程题]找出直系亲属
如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。
输入描述:
    输入包含多组测试用例,每组用例首先包含2个整数n(0<=n<=26)和m(0<m<50), 分别表示有n个亲属关系和m个问题, 然后接下来是n行的形式如ABC的字符串,表示A的父母亲分别是B和C,如果A的父母亲信息不全,则用-代替,例如A-C,再然后是m行形式如FA的字符串,表示询问F和A的关系。
    当n和m为0时结束输入。


输出描述:
    如果询问的2个人是直系亲属,请按题目描述输出2者的关系,如果没有直系关系,请输出-。
    具体含义和输出格式参见样例.

输入例子:
3 2
ABC
CDE
EFG
FA
BE
0 0

输出例子:
great-grandparent
-

1个回答

修改回答
  • var readline = require('readline');
    const rl = readline.createInterface({
            input: process.stdin,
            output: process.stdout
    });
    var line=0;
    var tree={};
    var res=[];
    var m,n;
    rl.on('line', function(input){
        if(line==0){
            var info = input.split(" ");
            m=parseInt(info[1]);
            n=parseInt(info[0]);
            m*n==0&&(line=-2);
        }else if(line<=n){
            family(input);
        }else if(line<=m+n){
            res.push(search(input.split("")));
            if(line==m+n){
                console.log(res.join("\n"));
                tree={};
                res=[];
                line=-1;
            }
        }
        line>-2&&(line++);
    });
    
    function family(str){
        var ary=str.split("");
            tree[ary[0]]=tree[ary[0]]||{name:ary[0]};
        tree[ary[1]]=tree[ary[1]]||{name:ary[1]};
        tree[ary[2]]=tree[ary[2]]||{name:ary[2]};
            tree[ary[1]].child=tree[ary[0]];
            tree[ary[2]].child=tree[ary[0]];
    }
    
    function search(ary,type){
        var res=type?"child":"parent";
        var count=0;
        var flag=false;
        type=type||0;
        a=tree[ary[type]];
        b=tree[ary[1-type]];
        
        while(a.child){
            count++;
            if(count>1){
                res=(count==2?"grand":"great-")+res;
            }
            if(b==a.child){
                flag==true;
                return res;
            }
            a=a.child;
        }
        return type?"-":search(ary,1);
    }
    


    发表于 今天 15:20:28 回复(0) 修改 删除
这道题你已经答过了,可以对 现有的回答 进行修改