2009年浙大 :找出直系亲属
2016-04-17 21:46
323 查看
题目描述:
如果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者的关系,如果没有直系关系,请输出-。
具体含义和输出格式参见样例.
样例输入:
样例输出:
如果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 -
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN=105; int son[MAXN]; int dep[MAXN]; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) break; memset(son,-1,sizeof(son)); memset(dep,0,sizeof(dep)); for(int i=0;i<n;i++) { scanf("%*c"); char a,b,c; scanf("%c%c%c",&a,&b,&c); a-='A'; if(b!='-') { b-='A'; son[b]=a; dep[b]=dep[a]+1; } if(c!='-') { c-='A'; son[c]=a; dep[c]=dep[a]+1; } } while(m--) { scanf("%*c"); char a,b; scanf("%c%c",&a,&b); a-='A'; b-='A'; int l=0; int start,goal; int up; if(dep[a]>dep[b]) { up=true; start=a; goal=b; } else { up=false; start=b; goal=a; } int tmp=start; bool mark=false; while(son[tmp]!=-1) { tmp=son[tmp]; l++; if(tmp==goal) { mark=true; break; } } if(mark==false) { printf("-\n"); } else { if(up==true) { if(l==1) { printf("parent\n"); } else if(l==2) { printf("grandparent\n"); } else { for(int i=l;i>2;i--) { printf("great-"); } printf("grandparent\n"); } } else { if(l==1) { printf("child\n"); } else if(l==2) { printf("grandchild\n"); } else { for(int i=l;i>2;i--) { printf("great-"); } printf("grandchild\n"); } } } } } return 0; }
相关文章推荐
- 剑指Offer--019-二叉树的镜像
- ElasticSearch几个漏洞总结
- POJ 2083 Fractal(分形题目)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- 1008 猜数字
- Boost的安装与使用(整整83篇)
- JSP语法学习笔记
- zigbee Zstack 开发主要步骤
- 利用JQuery实现ajax异步刷新页面
- 查看Linux系统的硬件配置及查看CPU、内存运行情况
- 专题二 · 1008
- css
- C++应用:简易五子棋游戏
- lab8:理解进程调度时机跟踪分析进程调度与进程切换的过程
- 友人与友情【诗词13首】
- 20145331 《Java程序设计》第7周学习总结
- BestCoder Round #80 (hdu5665,hdu5666,hdu5667(矩阵快速幂+费马小定理),hdu5668(中国剩余定理))
- 自考总结
- java控制控制台里面输出的星号的移动
- C#设计模式一句话总结