题目: 牛客网链接

概述: 用三个字母表示出三个人的关系,并回答提出的问题。

思路: 这题采用两种方法:

  1. 采用数组解决问题
    数组用来存储子女的下标(反正是独生子女),找关系的时候就不断地搜索子女。这里分为两种情况,一种是第一个字母是第二个字母的长辈,另一个是第一个字母是第二个字母的晚辈。只要把参数顺序倒过来即可。

  2. 采用树的方法来解决问题。这里就没写粘贴的牛客网的代码。思路很清晰,很适合复习二叉树相关的知识。

数组:

#include <iostream>
#include <algorithm>
using namespace std;int child[200];int find_child(int a, int b, int count)
{if(child[a] == -1){return 0;}else if(child[a] == b){return count;}int temp = find_child(child[a], b, count+1);return temp;
}int main()
{int n, m;while(scanf("%d%d", &n, &m) != EOF){fill(child, child+200, -1);//输入关系 char temp[4];for(int i = 0; i < n; i++){scanf("%s", temp);if(temp[1] != '-') { child[(int)temp[1]] = (int)temp[0];}if(temp[2] != '-') { child[(int)temp[2]] = (int)temp[0];}}//输入查询的问题char ques[3];for(int i = 0; i < m; i++){scanf("%s", ques);int flag = find_child(ques[0], ques[1], 1);if(flag){if(flag == 1) printf("parent\n");else{for(int j = 2; j < flag; j++){printf("great-");}printf("grandparent\n");}              continue;}flag = find_child(ques[1], ques[0], 1);if(flag){if(flag == 1) printf("child\n");else{for(int j = 2; j < flag; j++){printf("great-");}printf("grandchild\n");}          continue;}else{printf("-\n");}} }return 0;
}

二叉树:

链接:https://www.nowcoder.com/questionTerminal/2c958d09d29f46798696f15ae7c9703b
来源:牛客网#include <stdio.h>
#include <map>
#define N 26
using namespace std;struct Node{//二叉树节点int p1;//第一个双亲的下标,-1表示不存在int p2;//第二个双亲的下标,-1表示不存在
}tree[N];//顺序存储,下标就是它所代表的字符编号,比如0代表'A'int preOrder(int from, int to, int depth)
{//从from出发先序遍历到找到to为止,并返回to相对于from的深度if(from==to) return depth;if(tree[from].p1!=-1){int ret=preOrder(tree[from].p1, to, depth+1);if(ret!=-1) return ret;}if(tree[from].p2!=-1){int ret=preOrder(tree[from].p2, to, depth+1);if(ret!=-1) return ret;}return -1;
}int main()
{int n, m;while(scanf("%d %d", &n, &m)!=EOF){for(int i=0; i<N; i++){tree[i].p1=tree[i].p2=-1;}while(n--)//构建树{char str[4];scanf("%s", str);if(str[1]!='-') tree[str[0]-'A'].p1=str[1]-'A';if(str[2]!='-') tree[str[0]-'A'].p2=str[2]-'A';}while(m--)//查询{char str[3];scanf("%s", str);int from=str[0]-'A';int to=str[1]-'A';int ans1=preOrder(from, to, 0);if(ans1==1) printf("child\n");else if(ans1>=2){for(int i=ans1; i>2; i--) printf("great-");printf("grandchild\n");}else//看来不是晚辈,那就是长辈了{int ans2=preOrder(to, from, 0);if(ans2==1) printf("parent\n");else if(ans2>=2){for(int i=ans2; i>2; i--) printf("great-");printf("grandparent\n");}else printf("-\n");//也不是长辈,那就不是直系亲属}}}return 0;//大功告成
}

牛客网浙江大学机试--找出直系亲属相关推荐

  1. (牛客网)华为机试(二)

    (牛客网)华为机试题集解答 在解题前先分享一波oj刷题的固定格式代码,方便输入时使用 import java.util.*; import java.io.*; public class Main{ ...

  2. 牛客网–华为机试在线训练7:取近似值

    牛客网–华为机试在线训练7:取近似值 题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述: 输入一个正浮点数值 输 ...

  3. 牛客网–华为机试在线训练5:进制转换

    牛客网–华为机试在线训练5:进制转换 题目描述 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串.(多组同时输入 ) 输入描述: 输入一个十六进制的数值字符串. 输出描述: 输出该 ...

  4. 【To Debug】牛客网--华为机试在线训练3:明明的随机数

    牛客网–华为机试在线训练3:明明的随机数 题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字, ...

  5. 牛客网--华为机试在线训练2:计算字符个数

    牛客网–华为机试在线训练2:计算字符个数 题目描述 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 输入描述: 输入一个有字母 ...

  6. 牛客网华为机试(python)

    前言 牛客网华为机试(https://www.nowcoder.com/exam/oj/ta?tpId=37) 按难度分为入门,简单,中等,困难,较难五个等级 目录标题 前言 一,入门 二,简单 一, ...

  7. JavsScript牛客网华为机试(11-20)题解

    牛客网华为机试题解JavaScript版本 华为机试第11-20题解答(js) 11.数字颠倒 12.字符串反转 13.句子逆序 14.字符串排序 15.求int型数据在内存中存储时1的个数 16.购 ...

  8. 牛客网--华为机试在线训练10:字符个数统计

    牛客网–华为机试在线训练10:字符个数统计 题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127).不在范围内的不作统计. 输入描述: 输入N个字符,字符在A ...

  9. 牛客网–华为机试在线训练9:提取不重复的数

    牛客网–华为机试在线训练9:提取不重复的数 题目描述 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数. 输入描述: 输入一个int型整数 输出描述: 按照从右向左的阅读顺 ...

  10. 牛客网–华为机试在线训练8:合并表记录

    牛客网–华为机试在线训练8:合并表记录 题目描述 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出. 输入描述: 先输入键值对的个 ...

最新文章

  1. 云计算安全解决方案白皮书(一)
  2. C++之shared_ptr总结
  3. Distance计算的距离随经纬度不同
  4. 深度解密 Go math/rand
  5. html5下拉列表多行显示不出来,为什么我这个代码的效果显示不出来?我要显示的是鼠标经过选项出现下拉菜单栏!求大神提点!!!...
  6. 吴恩达|机器学习作业5.0.偏差与方差
  7. CRM中复制记录的方法
  8. PowerBuilder反编译,PowerBuilder 反编译
  9. Linux里面qt的可执行文件在命令行中可以打开,双击可执行文件打不开
  10. 多元函数泰勒展开与黑塞矩阵
  11. 计算机类课题研究方法,科研课题研究的基本方法(一)
  12. CS5211:DP/eDP to 2Port LVDS
  13. The page at ‘xxx‘ was loaded over HTTPS, but requested an insecure resource ‘xxx‘.
  14. buuctf——密码学的心声
  15. 第一讲_SQP添加与查询语句
  16. 【整理】linux学习笔记整理8
  17. 我的所有的浏览器被hao123 挟持了,终极解决方案
  18. 我的世界服务器物品代码,我的世界指令代码大全 2021通用指令代码汇总[多图]...
  19. 金田一少年の怪奇事件部
  20. wps 2019个人版 创建布尔运算

热门文章

  1. 回声状态网络(ESN)教程
  2. PyQt5 Qt 文件对话框QFileDialog 选择图片 在label控件上显示图片
  3. 学习java和html必须要知道的英文单词(入门单词,包括C#)
  4. 姿态估计1-08:FSA-Net(头部姿态估算)-源码无死角讲解(3)-Fine-grained 以及Scoring function
  5. uniapp 导航栏滚动渐显渐隐,自定义返回按钮,返回图标背景色透明
  6. hit_training_20140403
  7. 关于Facebook发币的7个问题,专家都是怎么说的?
  8. 2013下学期c语言作业,2013年计算机二级C语言模拟试题三及答案
  9. B+树数据库加锁历史
  10. 计算机安全模式快捷键,windows7怎么进入安全模式(快捷键进入的方法)