2011北邮网研机试-程序员宅基地

注意:所有代码均是根据题目描述进行了本地测试,没有在北邮oj上测试,不保证一定能AC。

点击链接查看历年机试题目汇总。

A打印字符串

题目描述

大家平时都会用到字符串,现在有几种字符串操作,需要你用这几种操作处理下字符串。
输入:
多组数据,以EOF结束。
第一行一个字符串,字符串长度大于0,并且小于等于200。
第二行一个数字t,(0<t<=200)。
下面t行,每行表示一种操作。
共有两种操作,每行数据的第一个数表示操作的种类:
翻转操作:第一个是一个数字0,然后两个数字i和len,翻转从下标i长度为len的子串。
替换操作:第一个是一个数字1,然后两个数字i和len,接着一个长度为len的字符串str,用str替换从下标i长度为len的子串。
字符串操作后会更新,旧的字符串被舍弃。(详见sample)
输出:
每个操作之后输出生成的新的字符串

说明:字符串下标从0开始,所有操作的数据范围都合乎规范。

样例输入

bac
2
0 0 3
1 1 2 as
1
2
3
4

样例输出

cab
cas
1
2

解析

这道题我做的不对,看了网上通过oj测试的解法,字符串中有空格,需要用getchar()吃掉回车。 

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
	string s;
	while(cin>>s)
	{
		int t;
		cin>>t;
		while(t--)
		{
			int x,i,len;
			cin>>x;
			if(x==0)
			{
				cin>>i>>len;
				reverse(s.begin()+i,s.begin()+i+len); //左闭右开 
				cout<<s<<endl;
			}
			else if(x==1)
			{
				string str,str1="",str2="";
				cin>>i>>len>>str;
				str1=s.substr(0,i);
				if(i<s.length()-1) str2=s.substr(i+len,s.length()-i-1);
				s=str1+str+str2;
				cout<<s<<endl;
			}
		}
	}
	return 0;
}

B 虚数

题目描述

给你一个复数集合{Aj+i*Bj},保证Aj和Bj都是整数,初始为空集。
每次会给你如下两种操作中的一种:
1."Insert x+iy",其中x,y都是整数。表示在集合中加入一个复数x+iy,同时输出此时集合的大小;
2."Pop"。如果集合为空集直接返回“Empty!”,如果有元素则以"x+iy"的形式显示集合中模值最大的复数,然后将该元素从集合中删除,之后在第二行显示操作之后的集合大小,如果为空集则显示“Empty!”。

输入:
第一行只有一个数T,代表case数。0<=T<=10
每一组case:
第一行有一个整数n,表示这组case中一共有n条命令0<n<=100
接下来n行每行有一个命令,命令如上所述
保证不会输入两个模值同样的元素,并保证实部虚部都大于0,小于1000。

输出:
依照上述原则输出每一个命令对应的输出
如果输入命令是Insert命令,则对应的输出占一行为集合大小;
如果输入命令是Pop命令,则对应的输出占一行或者两行,为模值最大的复数和集合大小。
请注意,输出集合大小的格式为"Size:空格x回车",x为集合大小

样例输入

1
5
Pop
Insert 1+i2
Insert 2+i3
Pop
Pop

样例输出

Empty!
Size:1
Size:2
2+i3
Size:1
1+i2
Empty! 


解析

运算符重载

#include <iostream>
#include <string>
#include <vector> 
#include <algorithm>
using namespace std;
struct node
{
	int x,y;
	int mod;
	bool operator <(const node& b)const
	{
		return mod<b.mod;
	}
	node(int n,int m) {x=n;y=m;mod=x*x+y*y;
	}
};
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		vector<node> command;
		int n;
		string s;
		cin>>n;
		while(n--)
		{
		cin>>s;
		if(s=="Pop")
		{
			if(command.size()==0) cout<<"Empty!"<<endl;
			else 
			{
				int len=command.size()-1;
				cout<<command[len].x<<"+i"<<command[len].y<<endl;
				command.pop_back();	
				if(command.size()==0) cout<<"Empty!"<<endl;
				else cout<<"Size:"<<command.size()<<endl;
			}
		}
		else if(s=="Insert")
		{
			int x,y;
			scanf("%d+i%d",&x,&y);
			node t(x,y);
			command.push_back(t);
			sort(command.begin(),command.end());
			cout<<"Size:"<<command.size()<<endl;
		}
	}
	}
	return 0;
}

C 中序遍历树

题目描述

给一棵树,你可以把其中任意一个节点作为根节点。每个节点都有一个小写字母,中序遍历,得到一个字符串,
求所有能得到的字符串的字典序最小串。因为这树一定二叉树,所以中序遍历时,
先中序遍历以节点序号最小的节点为根的子树,然后再遍历根节点,最后根据节点序号从小到大依次中序遍历剩下的子树。
提示:

意思就是请枚举所有的点为根,然后中序遍历
最后输出所有结果中字典序最小的
比如说第二组数据
以0为根时结果为 bacd
以1为根时结果为 cadb

以2为根时结果为 badc
以3为根时结果为 bacd
所以字典序最小的是bacd

输入:
多组数据,以EOF结束。

第一行一个数n(0< n < =100),表示树的节点的个数,节点从0开始。

然后一个长度为n的串,第i(0< = i < n)个字符表示节点i的字符。
接下来n-1行,每行两个数a,b,(0< = a,b < n),表示a和b之间有一条无向边。

输出:
题中要求的最小的字符串

样例输入

3
bac
0 1
1 2
4
abcd
0 1
0 2
0 3

样例输出

bac
bacd 


解析

参考的网上解法,用dfs 。

https://blog.csdn.net/SDUTyangkun/article/details/88617781?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
char a[101];
int vis[101];
int G[101][101];
string ans="";
int n;
void dfs(int t)
{
	vis[t]=1;
	if(ans.size()==n) return;
	int i;
	for(i=0;i<n;i++)
	{
		if(!vis[i]&&G[t][i])
		{
			dfs(i);
			break;
		}
	}
	ans+=a[t];
	for(;i<n;i++)
	{
		if(!vis[i]&&G[t][i])
		{
			dfs(i);
			//break;
		}
	}
}
int main()
{

	while(cin>>n)
	{
		cin>>a;
		memset(G,0,sizeof(G));
		
		int x,y;
		for(int i=1;i<n;i++)
		{
			 cin>>x>>y;
			 G[x][y]=G[y][x]=1;
		} 
		string cmp="zzzzzzzzzzz";
		for(int i=0;i<n;i++)
		{
			ans="";
			memset(vis,0,sizeof(vis));
			dfs(i);
			if(ans<cmp) cmp=ans;
		}
		cout<<cmp<<endl;
	}
	return 0;
}

D first集

一道很麻烦的题,不会做。

 

 

 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Reticent_Man/article/details/105748809

智能推荐

C语言“…”占位符及可变参数函数-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏4次。C语言函数的参数传递总是固定了个数,那么有没有传递任意个数参数的方法呢?在C++中,函数重载提供了多种参数传递的解决办法,但也不是任意参数个数。事实上,C语言是提供任意数量参数的解决方案的。printf(),scanf()等就是这样一类可支持任意参数个数变量的函数,以下是printf的用法示例。1printf("%d",x);..._scanf_s 占位符和其参数预计 1 可变参数

Simplygon软件之SimplygonUI 编辑器界面-程序员宅基地

文章浏览阅读2.8k次。Simplygon UISimplygonUI 默认布局Simplygon 安装完成后,可以双击快捷图标启动软件,软件启动后需要登入,登陆方式有两种1.Grid:在安装有 Simplygon Grid Server 功能的其他本地服务器上处理工作选择 Grid 选项卡输入 登陆凭证 和 服务器 IP 地址进行登陆,用户管理和凭证通过 Simplygon Grid管理实用程序进行管理 Si..._simplygon

如何写出高转化率文案_如何写出高转化率文案 pdf-程序员宅基地

文章浏览阅读465次。解剖1个案例,解锁8种文案写法! 1、以小写大。 关键在于有多大?只小不大无价值,只大不小无效果。 照顾树木、工人违规、修改设计是小事,却放大了土地价值:别墅的核心价值。 2、以具象写抽象。 以小写大,就是以细节写整体,也是以具象写抽象。 稀缺、珍惜、用心是抽象概念,直接写出来是瞎吆喝,要通过具象的行为和过程,让消费者感受到。 为保护这片原生林,开发商自掏腰包养了一个护林队,这才是消费者可以感受到的珍惜和用心。 3、以形象写具象 只具象,不够,还要形象。 人是通过形象来记忆、来联想的。 这几个标题和内文是具_如何写出高转化率文案 pdf

spring boot mybatis-generator 使用tk.mybatis.mapper通用mapper自动生成代码_tk.mybatis.mapper.generator.mapperplugin-程序员宅基地

文章浏览阅读1.3w次,点赞2次,收藏17次。前言这次的项目,使用spring boot 多模块开发。其中,数据库集成了data Jpa 和 Mybatis。最先引入的data jpa,但是后面涉及到多表关联多条件查询的时候,就显得很麻烦。然后就把mybatis也引入了进来。这里重点记录一下如何使用通用mapper逆向生成代码。提高我们的工作效率。环境开发工具:IntelliJ IDEA 2018项目框架: 基于Spring B..._tk.mybatis.mapper.generator.mapperplugin

量化投资之工具篇一:Backtrader从入门到精通(7)-Indicator类源代码解读(2)_dst[i] = math.fsum(src[i - period + 1:i + 1]) / pe-程序员宅基地

文章浏览阅读6.4k次,点赞20次,收藏54次。接上一篇继续。系统内置Indicator的介绍Backtrader提供了很多内置的Indicator,了解这些Indicator对我们自定义指标、理解现有指标以及制定策略具有重要作用。基本操作类Backtrader提供了很多基本操作类,作为定义其他指标的基准。先看PeriodN,这个类是所有需要使用周期进行计算指标(例如移动平均)的基类:class PeriodN(Indicator): ''' Base class for indicators which take a per_dst[i] = math.fsum(src[i - period + 1:i + 1]) / period indexerror: array ass

N76E003使用syn6288_n76e003 开发环境-程序员宅基地

文章浏览阅读312次。代码如下:/*---------------------------------------------------------------------------------------------------------*//* *//* Copyright(c) 2015 Nuvoton T_n76e003 开发环境

随便推点

python基础教程-数字与表达式——浮点数_python表达浮点数的两种方式-程序员宅基地

文章浏览阅读621次。1、python的加减乘数与计算机的加减乘除几乎差不多 + - * /2、如果参数除法中有一个为浮点数结果 亦为浮点数 >>> 1.0 / 2.0 0.5 >>> 1/2.0 0.53 、 双斜线 // 实现整除的操作符 >>> 1.0 // 2.0 0.0 >>> 1 // _python表达浮点数的两种方式

西瓜书《机器学习》课后答案——Chapter6_6.3_实验二、自主选择两个uci数据集,分别用高斯核训练svm分类器以及bp神经网络进行分-程序员宅基地

文章浏览阅读8.2k次,点赞5次,收藏45次。6.3 选择两个UCI数据集,分别用线性核和高斯核训练一个SVM,并与BP神经网络和C4.5决策树进行实验比较。 解答: (1) 准备libsvm的训练数据与测试数据从UCI网站上选择了Iris数据集,这个数据集总共分为3类,每类50个样本,每个实例有四个属性。数据保存在bezdekIris.txt文件中,举一个样本为例:5.1,3.5,1.4,0.2,Iris-setosa书中也没有介绍解决多_实验二、自主选择两个uci数据集,分别用高斯核训练svm分类器以及bp神经网络进行分

HBase-2.4.6安装教程 附常见错误解决_hbase2.4.6-程序员宅基地

文章浏览阅读741次。我这里采用了jdk1.8.0_301+hadoop-3.3.1+zookeeper-3.6.3+hbase-2.4.6的版本不同版本可能不能兼容,兼容性问题可以去官网查看http://hbase.apache.org/book.html#_preface我这里有三台虚拟机,hadoop102,hadoop103,hadoop1041、zookeeper正常部署首先保证三台机器的zookeeper正常启动[user@hadoop102 zookeeper-3.6.3]$ bin/zkServer.s_hbase2.4.6

技术合同填写说明_本合同履行完毕后,上述技术资料按以下方式处理-程序员宅基地

文章浏览阅读6.1k次,点赞4次,收藏7次。技术合同填写说明 所属类别:办事指南 发布时间:2009年6月12日 合同编号: 技术开发(委托)合同 项目名称:用简明、准确的文字表达合同的标的和名称 委托方(甲方):用《企业法人营业执照》规定的法定名称 (买方)_本合同履行完毕后,上述技术资料按以下方式处理

Exynos4412异步串口通信及实验_异步串行通信方式数据值怎么求-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏12次。通信传输方式串行通信(二进制) 串行传送,数据是按顺序一位一位传送,一条数据线或差分线传输并行通信 数据各位同时传送,多条数据线比较:串行通常传输速度比较慢,成本低,适用于计算机间的远距离传输。并行传输速率高,成本也高,适用于近距离设备传输,当然了还有RS-485,RS-422,使用了串行差分通信总线,传输速率快,抗干扰性能好,同时传输距离远。同步传输与异步传输_异步串行通信方式数据值怎么求

SpringCloud若依RuoYi多数据源切换_若依框架下业务层一个方法下更换数据源调用接口-程序员宅基地

文章浏览阅读3.8k次。若依自带dynamic-datasource直接使用com.baomidou.dynamic.datasource.annotation.DS注解就可以完成多数据源切换有 dynamic-datasource 就不用添加这个依赖<dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId&_若依框架下业务层一个方法下更换数据源调用接口

推荐文章

热门文章

相关标签