2020北航计算机夏令营机试题目个人理解
一、二叉树(60分)
给你一个整数序列,用这些数构成一个完全二叉排序树,输出此二叉树的层序遍历序列。输入的第一行是一个整数n,表示这个整数序列的长度,输入的第二行包含n个整数,每个数代表完全二叉排序树的一个节点,现在需要输出由这n个整数构成的完全二叉排序树的层序遍历序列。
输入样例:
18
56 987 -25 0 1021 -238 399 12 77 -1 72190 -25 -168 -41367 3218 12 0 -25
输出样例:
12 -1 987 -25 0 77 3218 -238 -25 0 12 56 399 1021 72190 -41367 -168 -25
个人思路,先排序输入数组得到完全二叉树的中序遍历序列,然后构建一个完全二叉索引树(这颗完全二叉树的节点存储的值是它的层数)中序遍历完全二叉索引树得到的序列,就是前面这个排完序的数组每个元素对应层数。然后再按层数输出就行。
#include <bits/stdc++.h>
using namespace std;
vector<int>data;
vector<int>ind;
vector<int>order_data;//存放index完全二叉树的中序遍历
int n;
//中序遍历
void visits(int root){if(root>=n)return;//超过节点范围了else{visits(2*root+1);//左子树order_data.push_back(ind[root]);visits(2*root+2);//右子树}
}
int main() {cin>>n;int cnt=n;int tp;while(cnt--){cin>>tp;data.push_back(tp);}cnt=n;//构建索引树int level=0;//计算层数int count=1;for(int i=1;cnt>0;i++){level++;for(int k=0;k<count&&cnt>0;k++){ind.push_back(i);cnt--;//完全二叉树索引节点存放的是这个节点的层数}count*=2;}//排序,则得到了原来数据建立的排序完全二叉树的中序遍历sort(data.begin(),data.end());//得到数据visits(0);//输出数据vector<vector<int>>mymap(level);for(int i=0;i<n;i++){mymap[order_data[i]-1].push_back(data[i]);}for(int i=0;i<level;i++){for(int m=0;m<mymap[i].size();m++)cout<<mymap[i][m]<<" ";}
}
50行以内解决了hhh,也可以自己算其中的其他关系,但是建立索引树应该是比较快想到的思路了
二、栈(40分)
给你一个函数调用过程,求调用的最大嵌套深度所对应的函数名,并输出调用路径,同时输出这个函数父函数(调用者)的个数和被调用的次数。同一个函数,如果有多条调用路径都可使其嵌套深度最深,则只输出第一条调用路径。
输入的数据中,若为1 funcName的形式,则表示调用funcName这个函数,若输入的是0,则表示结束对嵌套深度最大的函数的调用。
输入样例:
1 main
1 input
0
1 mysqrt
0
1 findA
0
1 findB
1 area
1 mysin
0
1 mycos
0
1 mysqrt
0
0
0
1 findC
1 area
1 mysin
0
0
1 mysqrt
1 max
0
0
0
1 output
0
0
输出样例:
mysin main-findB-area 1 2
mycos main-findB-area 1 1
mysqrt main-findB-area 3 3
max main-findC-mysqrt 1 1
个人思路:这只是简单的栈模拟,可以边输入边处理的,细心做好记录还是比较容易的
#include <bits/stdc++.h>
using namespace std;
map<string,int>mp;//记录每个函数调用次数
map<string,set<string>>fu;//记录每个函数父函数个数
vector<string>sta;//模拟栈
vector<vector<string>>data(100);//记录所有最长完整调用
int maxlen=0;int num=0;//num记录有多少个最长的调用
int main(){int op;string func;int nowlen=0;while(cin>>op){if(op==1){nowlen++;cin>>func;sta.push_back(func);//父函数if(nowlen>1){fu[func].insert(sta[nowlen-2]);}if(mp.find(func)!=mp.end())mp[func]++;elsemp[func]=1;}else{if(nowlen>maxlen){//找到一条当前最长if(num!=0){//清空之前的for(int i=0;i<num;i++)data[i].clear();num=0;}//装入新的data[num++]=sta;maxlen=nowlen;}else if(nowlen==maxlen){//看下是不是以前出现过的int flag=0;for(int i=0;i<num;i++){if(data[i][maxlen-1]==sta[nowlen-1]){flag=1;break;}}if(!flag){data[num++]=sta;}}//出栈nowlen--;sta.erase(sta.end());}}//输出for(int i=0;i<num;i++){cout<<data[i][maxlen-1]<<" ";for(int j=0;j<data[i].size()-2;j++)cout<<data[i][j]<<"-";cout<<data[i][maxlen-2]<<" ";cout<<fu[data[i][maxlen-1]].size()<<" ";cout<<mp[data[i][maxlen-1]];cout<<endl;}
}
顺便推荐一个在线编程很棒的网站:Online Compiler and IDE >> C/C++, Java, PHP, Python, Perl and 70+ other compilers and interpreters - Ideone.com
2020北航计算机夏令营机试题目个人理解相关推荐
- 2020北航计算机夏令营机试题目讲解
一.二叉树(60分) 给你一个整数序列,用这些数构成一个完全二叉排序树,输出此二叉树的层序遍历序列. 输入的第一行是一个整数n,表示这个整数序列的长度,输入的第二行包含n个整数,每个数代表完全 ...
- 人民大学计算机夏令营试题,中国人民大学信息学院2017年夏令营机试题目(考生回忆版)...
中国人民大学信息学院2017年夏令营机试题目(考生回忆版) (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 中国人民大学信息学院20 ...
- 中科大计算机科学夏令营,2019中科大计算机夏令营机试
2019中科大计算机夏令营机试 今年是中科大计算机夏令营第一次增加上机考试,而且在离开营一个星期的时候才进行通知.极其短暂的准备时间,加上未知的不确定性,还是带来了不小的挑战.听学长说前些年科大夏令营 ...
- 2020复旦大学计算机夏令营机试题
2020复旦大学计算机夏令营机试题 这个是开卷编程,不计入成绩,但是面试会问你做的情况.
- 2018南京大学计算机夏令营机试
1. Count number of binary strings without consecutive 1's Given a positive integer n(3≤n≤90), count ...
- 计算机复试机试题目与答案,二零一四年华中科技大学计算机研究生复试机试题目...
2014年华中科技大学计算机研究生复试机试题目 2014年研究生复试终于结束了,因为自己寻找往年机试题目的经历很艰难,故我希望为之后的学弟,学妹们提供一些资料,以供参考. 今年机试题目总共有3道,编译 ...
- 2020北航计算机夏令营
自己在保研过程中通过查阅学长学姐的面经贴,收获很大.所以自己也写一个夏令营总结,希望能帮助到后面的学弟学妹们. 北航的夏令营感觉机制非常成熟,也很有目的性,上来没有很多余的工作,就是机试,然后面试,然 ...
- 记2018年北理计算机夏令营+机试
个人情况: 2015级 山东大学 成绩排名13/294, 综合排名11/294,四六级552/476 竞赛 包括英特尔杯三等奖,数字媒体科技作品竞赛三等奖,和山东省大学生软件大赛一等奖 科研 没有论文 ...
- 2020同济大学电子与信息工程学院计算机系夏令营机试题目【含题解、注释】
第一题:签到题(10分) [题目要求]: 键盘依次输入 4 个字符串,分别是临时学号.姓名.报考类别和本科学校,按右对齐方式输出,要求其中最长的字符串输出时左边无空格,4 行的冒号对齐,冒号为半角字符 ...
最新文章
- php 有 stringbuffer,string,stringbuffer以及stringbuilder的区别
- 微软sccm服务器,System Center 2012R2系列之SCCM部署
- C# 执行查询语句,返回DataSet
- mysql云上迁移_自建mysql 迁移到云上-问答-阿里云开发者社区-阿里云
- 集成druid实现数据库密码加密功能
- 一个快速排序写了快 10000 字?
- Android异步加载全解析之引入二级缓存
- 前端自动化构建工具gulp的使用介绍
- 灰狼优化算法与影响力最大化问题
- python学习笔记——类与对象、常用函数
- XJTU 算法设计与问题求解作业题 第一周
- 机器学习 --- 朴素贝叶斯分类器
- java hypot_Java StrictMath hypot()用法及代码示例
- 同等学力计算机科学与技术真题-2006年
- mysql lbs_基于LBS的地理位置附近的搜索以及由近及远的排序(MYSQL)
- windows 平台下curl使用报错: (3) [globbing] unmatched close brace/bracket in column 13
- 1C.小a与星际探索(C++)
- HDFS 本地编程报错java.net.ConnectException: Call From LAPTOP-LJF22VB3/192.168.56.1 to 192.168
- TI杯 LaunchPad MSP430开发环境搭建
- java 显示中文_java显示中文乱码的解决方法