题目

给一个字符串(aaaa(bbbb(cccc,dddd),eeee(ffff)))该字符串

表明的是各个人的层次关系。

比如aaaa是bbbb和eeee的领导,bbbb是cccc和dddd的领导。

现输入一个名称,比如ffff,要求输出其领导关系。

输出:aaaa>eeee>ffff


思路1

  1. 字符串拆分,学习了regex,详见我的前一篇博客。
  2. 建立索引树,struct node { string name; int lead; }n[100];,每个结点的lead值为其领导结点的索引值。
  3. 从要寻找的结点开始,以 lead 值向前遍历,并依次头插入一个字符串。
  4. 输出该字符串。

代码

#include <iostream>
#include <string>
#include <vector>
#include <regex>
#include <stack>
using namespace std;
struct node {string name;int lead;
}n[100];
void divide(string s,vector<string> &v,regex reg)
{smatch mResult;if (regex_search(s, mResult, reg)) {for (auto it = mResult.prefix().first; it != mResult.prefix().second; it++) {if (*it == ',')continue;v.push_back(string(1, *it));}v.push_back(string(mResult[0].first, mResult[0].second));divide(mResult.suffix(), v, reg);}else {for (auto it = s.begin(); it != s.end(); it++)v.push_back(string(1, *it));}
}
int main()
{string source,people;vector<string> mid;cin >> source >> people;regex reg("[a-zA-Z]+");divide(source, mid, reg);int lead = 0, i = 0;stack<int> st;for (auto it = mid.begin(); it != mid.end(); it++) {//cout << *it << ' ';if (*it == "(") {st.push(lead);lead = i;}else if (*it == ")") {lead = st.top();st.pop();}else {i++;n[i].name = *it;n[i].lead = lead;}}string p;for (int j = 0; j <= i; j++) {if (n[j].name == people) {while (j != 0) {p.insert(p.begin(),n[j].name.begin(),n[j].name.end());if (n[j].lead != 0)p.insert(p.begin(), '>');j = n[j].lead;}break;}}cout << p;return 0;
}

(2020.4.12)
好吧时隔两个月,再看自己曾经的代码确实觉得emmmm,不过当时确实是想着学学regex才那么写

重新写了一个简单实用的

  • 这次连领导的编号都省了,直接用map映射,当然了要求不能有重名人士
  • 还是用栈保存历任领导,栈顶永远是当前领导
#include<string.h>
#include<iostream>
#include<stack>
#include<map>
using namespace std;string str;
map<string,string> mp; // <名字,领导名字>
stack<string> st;   //栈顶永远是当前领导的名字
string last;    //最后一个访问的同志,有可能是下一个领导int getName(int i)
{int start = i;while(str[i]>='a' && str[i]<='z')i++;string name = str.substr(start,i-start);mp[name] = st.top();last = name;    //记录return i-1;
}int main(){cin >> str;st.push(""); //第一个人没有领导 for(int i=0;i<str.length();i++){if(str[i]>='a' && str[i]<='z')i = getName(i);else if(str[i] == '(')  //见到左括号则说明换领导了 st.push(last);       //最后遍历的那个人是当前领导 else if(str[i] == ')')    //见到右括号则用栈还原上一个领导 st.pop(); }string query, out;cin >> query;   //待查询人士out = query; query = mp[query];  while(query!=""){out.insert(out.begin(),'>');out.insert(out.begin(),query.begin(),query.end()); // out = query + out的高效版query = mp[query];}cout << out << endl;return 0;
}

2011北理机试题——层次关系相关推荐

  1. 2011年华科计算机考研复试机试题真题

    很好的资料哦,更多资料请访问王道论坛:www.cskaoyan.com 2011年华科计算机考研复试机试题真题:

  2. 记2018年北理计算机夏令营+机试

    个人情况: 2015级 山东大学 成绩排名13/294, 综合排名11/294,四六级552/476 竞赛 包括英特尔杯三等奖,数字媒体科技作品竞赛三等奖,和山东省大学生软件大赛一等奖 科研 没有论文 ...

  3. 【夏令营保研经验】北理计算机,北航计算机夏令营,中科院霸面保研经验(2019.7)

    目录 参加夏令营时的个人情况 北理计算机 7.8全天报道 7.9上午开营仪式各个实验所宣讲,下午机试 7.10上午参观实验室,下午面试 北航计算机 7.11上午报道,下午机试 7.12上午面试,下午摸 ...

  4. 一条坎坷的保研路:北理、天大、南开、厦大、川大、支保

    一条坎坷的保研路:北理,天大,南开,厦大,支保 写在前面的话 我的曲折保研路 夏令营阶段 厦门大学 天津大学 电子科技大学 南京大学 预推免 电子科技大学 计算机学院 软件学院 四川大学 南开大学 北 ...

  5. 北理计算机考研初试复试经验分享贴专硕889

    北京理工大学计算机跨考专硕889初试复试考研经验贴分享 学长是18年某普通本科跨考北理计算机专硕,之前写的这篇考研经验帖,帮助了众多学子圆梦北理计算机,尤其是对一些跨考学生提供了很大帮助,希望后来者对 ...

  6. 北理计算机未来,2021北理计算机专硕889考研经验分享

    北理算是北京985院校中,性价比高,相对较容**的了,而且老师们只看重学生的知识技术水平和学习能力,不太歧视普通本科和跨考学生,(相对来说,同等条件下,老师肯定更喜欢好学校本专业学生),当然初试分数高 ...

  7. 【保研】2020年交大、南大、国防科大、北理计算机夏令营经历

    2020年交大.南大.国防科大.北理计算机夏令营经历 个人情况 参加的夏令营 *上海交通大学 *南京大学 *国防科技大学 *北京理工大学 我的准备 *基础知识 *机试刷题 *面试 个人情况 某普通98 ...

  8. 2020计算机专业保研经历(成电、天大、北理、大工、北交、东北)

    1 导读 写这篇博客主要是想记录一下2020这次难忘的保研经历,也是我CSDN的第一篇博客,主要目的是记录经历,也希望对大家有一定的帮助. 2 自我介绍 中下游211计算机科学与技术,学科评估C+(为 ...

  9. 北理通信男找工作的经历及心得

    注:北理毕业的通信专业研究生写的,希望对大家也有所帮助. 找工作很久了,一直想写一写笔经面经,也给师弟师妹留下一些建议和忠告.但是工作没着落时没心思写,找到工作又懒得写.狠了狠心,却写出这么多字,看着 ...

  10. 华为校园招聘Java机试题

    又到校园招聘的时候了,前几天听同学说华为校招还要考上机,然后就在网上找往年的机试题,找到之后就开始战斗了..下面的题目都是在网上找的,然后代码是自己一个一个写的... 1.程序实现目标: 输入一个字符 ...

最新文章

  1. python基础单词-学Python必背的初级单词,快来看看学吧
  2. Oracle 原理:高水位线、PCTFREE、PCTUSED、索引组织表、簇表、临时表
  3. 【MATLAB】主要功能
  4. shell编程之进阶篇二常见运算符号
  5. 第218天:Angular---模块和控制器
  6. 2018蓝桥杯B组:猴子分香蕉(C++/JAVA)
  7. 开发环境运行正常,发布服务器后提示HTTP 错误 403.14 - Forbidden
  8. java开发是什么_java开发到底是做什么的
  9. ubuntu linux qq闪退
  10. 金融支付-银联卡支付系统产品介绍
  11. 超级终端之——MobaXterm
  12. uml分析考勤系统设计
  13. MacOs12Macbookpro读写NTFS
  14. txt文件内容导入mysql数据库中_将txt文件导入mysql数据库
  15. echarts图例动态置灰
  16. android category 讲解
  17. 21 Excel动态图表实现原理
  18. LeetCode-86
  19. seo从入门到精通_SEO外包_seo技术教学案例培训学习研究中心自学网
  20. 运维自动化之系统部署

热门文章

  1. MySQL学习笔记——第1章 数据库和MySQL
  2. 静态路由实现路由过滤
  3. C++网络编程实例之多个客户端交互(多线程)
  4. OSI参考模型(1)
  5. CICD详解(二)——Jenkins持续集成原理
  6. Python处理多种编码报错的处理
  7. NYOJ--40--公约数和公倍数
  8. 基于WCF的通道网络传输数据压缩技术的应用研究
  9. 虚机里的vCenter 迁移
  10. 【js与jquery】导航下拉菜单效果