noip第21课作业
1. 遍历二叉树
【问题描述】
以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树:
输出其中序序列和后序序列,其中总结点个数不超过100。
输入:仅一行,输入一串字符串,该字符串必须能构成一棵二叉树;
输出:两行,第一行为中序序列,第二行为后序序列。
【样例输入】
abd###ce##f##
【样例输出】
dbaecf
dbefca
#include<iostream>
using namespace std;
struct node{
char value;
int left,right;//左右孩子子树
}data[];
char ch;
int cnt,root;
//建立一棵二叉树 abd###ce##f##
int buildTree(int bt){
cin >> ch;
if(ch == '#'){
bt = ;
}
else{
bt = ++cnt;
data[bt].value = ch;
data[bt].left = data[bt].right = ;
data[bt].left = buildTree(bt);
data[bt].right = buildTree(bt);
}
return bt;
}
//中序序列
void MidTree(int bt){
if(bt){
MidTree(data[bt].left);
cout << data[bt].value;
MidTree(data[bt].right);
}
}
//后序序列
void LastTree(int bt){
if(bt){
LastTree(data[bt].left);
LastTree(data[bt].right);
cout << data[bt].value;
}
}
int main()
{
root = ;
cnt = ;
root = buildTree();
MidTree(root);
cout << endl;
LastTree(root);
return ;
}
2. 计算二叉树的结点个数
【问题描述】
以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树:
输出其总结点的个数,其中总结点个数不超过100。
输入:仅一行,输入一串字符串,该字符串必须能构成一棵二叉树;
输出:仅一行,为该二叉树的结点个数。
【样例输入】
abd###ce##f##
【样例输出】
6
#include<iostream>
using namespace std;
struct node{
char value;
int left,right;//左右孩子子树
}data[];
char ch;
int cnt,root;
//建立一棵二叉树 abd###ce##f##
int buildTree(int bt){
cin >> ch;
if(ch == '#'){
bt = ;
}
else{
bt = ++cnt;
data[bt].value = ch;
data[bt].left = data[bt].right = ;
data[bt].left = buildTree(bt);
data[bt].right = buildTree(bt);
}
return bt;
}
//计算结点数
int Node(int bt){
if(bt){
if(data[bt].left == && data[bt].right == ) return ;
else return Node(data[bt].left)+Node(data[bt].right) + ;
}
else return ;
}
int main()
{
root = ;
cnt = ;
root = buildTree();
cout << Node(root) << endl;
return ;
}
3. 计算二叉树的叶子结点个数
【问题描述】
以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树:
输出其叶子结点的个数,其中总结点个数不超过100。
输入:仅一行,输入一串字符串,该字符串必须能构成一棵二叉树;
输出:仅一行,为该二叉树的叶子结点的个数。
【样例输入】
abd###ce##f##
【样例输出】
3
#include<iostream>
using namespace std;
struct node{
char value;
int left,right;//左右孩子子树
}data[];
char ch;
int cnt,root;
//建立一棵二叉树 abd###ce##f##
int buildTree(int bt){
cin >> ch;
if(ch == '#'){
bt = ;
}
else{
bt = ++cnt;
data[bt].value = ch;
data[bt].left = data[bt].right = ;
data[bt].left = buildTree(bt);
data[bt].right = buildTree(bt);
}
return bt;
}
//计算叶子数
int Leaf(int bt){
if(bt){
if(data[bt].left == && data[bt].right == ){
return ;
}
else return Leaf(data[bt].left)+Leaf(data[bt].right);
}
else return ;
}
int main()
{
root = ;
cnt = ;
root = buildTree();
cout << Leaf(root) << endl;
return ;
}
4. 解密犯罪团伙
【问题描述】
快过年了,犯罪分子们也开始为年终奖“奋斗”了,小明的家乡出现了多次抢劫事件。由于强盗人数过于庞大,作案频繁,警方想查清楚到底有几个犯罪团伙实在是太不容易了,不过呢,经过很多天的努力,警察叔叔还是搜集到了一些线索,需要聪明的我们编写程序帮助警察叔叔分析一下有多少个独立的犯罪团伙?
输入格式:输入第一行为n,m,n表示强盗的人数,m表示警方搜集到的m条线索。接下来m行每一行有两个数a,b,表示强盗a和强盗b是通过。
数据范围说明:(1≤n≤20000),(1≤m≤1000000),1≤a,b≤n。
【输入样例】
10 9
1 2
3 4
5 2
4 6
2 6
8 7
9 7
1 6
2 4
【输出样例】
3
#include<iostream>
using namespace std;
int f[] = {},n,m,k,sum = ;
//数组初始化,数组里存的是自己的下标
void init(){
for(int i = ; i <= n; i++){
f[i] = i;
}
}
//查找过程
int getf(int v){
if(f[v] == v){
return v;
}
else{
f[v] = getf(f[v]);
return f[v];
}
}
//合并的过程
void merge(int x, int y){
int t1,t2;
t1 = getf(x);
t2 = getf(y);
if(t1 != t2){
f[t2] = t1;
}
}
int main()
{
int i,x,y;
cin >> n >> m;
init();
for(i = ; i <= m; i++){
cin >> x >> y;
merge(x,y);
}
for(i = ; i <= n; i++){
if(f[i] == i) sum++;
}
cout << sum << endl;
return ;
}
1. 小球下落
【问题描述】
许多的小球一个一个的从一棵满二叉树上掉下来组成FBT(Full Binary Tree,满二叉树),每一时间,一个正在下降的球第一个访问的是非叶子节点。然后继续下降时,或者走右子树,或者走左子树,直到访问到叶子节点。决定球运动方向的是每个节点的布尔值。最初,所有的节点都是false,当访问到一个节点时,如果这个节点时false,则这个球把它变成true,然后从左子树走,继续他的旅程。如果节点时true,则球也会改变它为false,而接下来从右子树走。满二叉树的标记方法如下图:
因为所有的节点最初为false,所以第一个球将会访问节点1,节点2和节点4,转变节点的布尔值后在节点8停止。第二个球将会访问节点1,3,6,在节点12停止。明显地,第三个球在它停止之前,会访问节点1,2,5,在节点10停止。现在你的任务是,给定FBT的深度D,和I,表示第I个小球下落,你可以假定I不超过给定的FBT的叶子树,写一个程序求小球停止时的叶子序号。
输入:仅一行,包含两个用空格隔开的整数D和I(2≤D≤20,I≤I≤524288)。
输出:对应输出第1个小球下落停止时的叶子序号。
【样例输入】4 2
【样例输出】12
#include<iostream>
using namespace std;
bool tree[*];
int main()
{
int d,k,i,j,p;
cin >> d >> k;
for(i = ; i <= k; i++){ //枚举每一个球的下落情况
p = ;
for(j = ; j < d; j++){
if(tree[p] == false){ //结点的值为0
tree[p] = true;
p *= ; //向左走
}
else{ //结点的值为 1
tree[p] = false;
p = p*+; //向右走
}
}
}
cout << p << endl;
return ;
}
noip第21课作业的更多相关文章
- noip第34课作业
1. 信息加密 [问题描述] 在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去.有一种加密规则是这样的:1. 对于字母字符,将其转换成其后的第3个字母.例如:A→D,a→ ...
- noip第27课作业
1. 繁忙的都市 [问题描述] 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个 ...
- noip第5课作业
1. 计算税收 [问题描述] 对某产品征收税金,在产值1万元以上收税5%:在1万元以下但在5000元或者以上的征收税3%:在5000元以下但在1000元或以上征收税2%:1000元以下的免收税 ...
- noip第4课作业
1. 计算邮资 [问题描述] 根据邮件的重量和用户是否选择加急计算邮费.计算规则:重量在1000克以内 (包含1000克),基本费8元.超过1000克的部分,每500克加收超重费4元,不足500 ...
- noip第9课作业
1. 打印乘法表 [问题描述] 用for循环实现输出1至9的乘法表 [样例输出] 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4 ...
- noip第21课资料
- noip第33课作业
1. 排座椅 [问题描述] 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同 ...
- noip第29课作业
1. 钢条切割 [问题描述] 一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi.那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大. ...
- noip第28课作业
分段数列 [问题描述] 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入格式: 输入第1行包含两个正整 ...
随机推荐
- c#特性attribute:
特性是被编译到metadata中, 是提供给反射用的. 特性attribute:1 什么是attribute,和注释有什么区别 2 声明和使用attribute3 使用attribute完成扩展4 ...
- 时间处理:计算下一天日期,如输入"2004/12/31"(注释2014年12月31日),则输出"2005/1/1".
/* ============================================================================ Name : Exercise.c Au ...
- mybatis入门--单表的增删改操作
单表的增加操作 前面我们看了如何搭建mybatis框架以及查询操作,这里我们说下如何使用mybatis进行增加用户的操作.首先是在user.xml文件中添加insert的方法.代码如下 <!-- ...
- day2-pycharm创建项目,driver下载和浏览器设置
对于ie需要设置,才能使用ie做测试 火狐的使用不能超过43版本,ie11现在有多次弹出alert无法识别其内容的问题 https://github.com/SeleniumHQ/selenium/w ...
- 语法分析器初步学习——LISP语法分析
语法分析器初步学习——LISP语法分析 本文参考自vczh的<如何手写语法分析器>. LISP的表达式是按照前缀的形式写的,比如(1+2)*(3+4)在LISP中会写成(*(+ 1 2)( ...
- maven项目springmvc导包失败-JsonProcessingException
昨天搞了好久还是没有解决,今天把springaop小demo敲一遍时,启动tomcat时报错: org.springframework.beans.factory.BeanCreationExcept ...
- Netsharp下微信菜单以及OAuth
一.OAuth介绍 在微信开发中,当打开一个页面是,业务场景一般会基于粉丝绑定用户信息,即页面需要基于粉丝和用户的身份处理业务逻辑. 在微信中打开一个页面有三个场景: 1.文本回复中直接包含url 2 ...
- Tgrocery学习及使用
能够学习到短文本分类模型——Tgrocery,十分感谢@GavinBuildSomething把源码及测试数据分享,在此我也作为一名学习者将自己的学习过程记录下来,希望对其他人有所帮助. 1.学习 ...
- Windows8 App Store 开发者会关心的文档
在远程计算机上从 Visual Studio 调试和测试 Windows 应用商店应用程序 http://msdn.microsoft.com/zh-cn/library/windows/apps/h ...
- 【Redis】安装 Redis接口时异常 ,系统ruby版本过低
场景 操作系统Linux CentOS 7.2,安装Redis接口时,使用命令:gem install redis ,用于系统ruby版本过低,报错“redis requires Ruby versi ...