复旦历年机试题

码一下
https://blog.csdn.net/weixin_34381687/article/details/87088024
按考场老师指示的方法和要求提交源代码文件。提交不必要的文件、建不必要的文件夹、不必要的压缩、不按要求命名文件,而导致评测程序找不到对应文件的,将得0分。没有特别说明的,输入和输出均为文本文件,存放在当前目录,即不要指定文件路径。文件命名如下:
源代码文件 输入文件 输出文件
第一题 p1.cpp p1.in p2.out
第二题 p2.cpp p2.in p2.out
第三题 p3.cpp p3.in p3.out
第四题 p4.cpp p4.in p4.out
代码需使用标准C或C++语法,源代码内不要包含不必要的头文件(允许使用STL库),一道题的所有代码都要放到同一个.cpp文件中,不要自己写其他头文件。程序的main函数请严格按照以下格式书写,不要使用编程环境自动生成的框架。程序入口必须为main,程序中没有main函数或不符合规定格式导致源码无法被机器正确评阅,将作0分处理。
//只包含必须的头文件
//不要使用IDE自动生成的代码框架
intmain() {
//此处填写代码
return 0;
}
我们基本采用黑盒测试,因此不完全正确的程序,将可能只得到0分。
仔细阅读题目要求,一定要确保您的输入输出严格符合要求。如输入输出格式不严格遵循题目的要求,会导致被判断为结果错误而不得分。输入输出示例中的注释文字,不是输入输出的组成部分。
提交的源代码必须保持无编译错误,提交有编译错误的程序该题直接得-10分。
除题目另有要求外,程序执行时间应在0.1秒之内,程序中的死循环恕不等待;内存占用不得超过128MB,超过限制的程序将不能通过测试。
所有题目的测试数据不保证数据具有生活常识上的合理性。
不要编写破坏性程序,否则产生的结果对您也是破坏性的,即取消评分资格。
2011
输入3个子串, 输出这3个子串的最大公共子串 。
输入树的中序和后序排列,输出树的层次遍历。上机要求和评分规则:
第一题、黑盒测试,只要求程序按格式输出结果正确。
第二题、按照思路,规范编程,代码三方面综合考虑得分。
2012
三道题。
1第一道题目是排序问题。1000个成绩输出前30%。最好的做法是用最大堆吧。我用QSORT的。算了一下效率差不多。要是数据量的再大话估计不行了。
2.第二道题目是二叉树问题。比如节点是ABCDE编号是01234,给出每个左右子树的编号。求最大叶子间距。我是先建树,然后左右子树深度相加的。
3.第二道是英文题目,为了响应JYB的号召。加强英文考核啊。不过是水题。就是给一个字符串比如ABC 再给一个整数比如3.输出AAABBBCCC就行了。
第一第三道是黑盒测试。按结果给分。第二道根据算法思想步骤给分。要写注释。

第二题这样做有问题。比如下面这棵树

应该是5到7的距离为4,而不是深度和为3.

递归遍历的时候求每个结点左右子树深度和,更新进一个全局变量就行。不能只求根的左右子树。

2013
Problem1: 字符串匹配
对于主串M和模式串P,找到P在M中出现的所有子串的第一个字符在P中的位置。P中第一个字符所在的位置为0。首行的数字表示有多少组字符串。
[输入及示例]
2
ababababa
ababa
aaa
aa
[输出及示例]
0 2 4
0 1
(相邻位置之间用一个空格隔开)
Problem2:A Famous ICPC Team
Mr. B, Mr. G, Mr. M and their coach Professor S are planning their way for the ACM-ICPC World Finals. Each of the four has a square-shaped suitcase with side length Ai (1<=i<=4) respectively. They want to pack their suitcases into a large square box. The heights of the large box as well as the four suitcases are exactly the same. So they only need to consider the large box’s side length. Of course, you should write a program to output the minimum side length of the large box, so that the four suitcases can be put into the box without overlapping.
[Input]
There are N test cases. The first line is N.
Each test case contains only one line containing 4 integers Ai (1<=i<=4, 1<=Ai<=1,000,000,000) indicating the side length of each suitcase.
[Output]
For each test case, display a single line containing the case number and the minimum side length of the large box required.
[Sample Input]
2
2 2 2 2
2 2 2 1
[Output for Sample Input]
Case 1: 4
Case 2: 4
[Explanation]
For the first case, all suitcases have size 2x2. So they can perfectly be packed in a 4x4 large box without wasting any space.
For the second case, three suitcases have size 2x2 and the last one is 1x1. No matter how you rotate or move the suitcases, the side length of the large box must be at least 4.
Problem3:A Famous Grid
Mr. B has recently discovered the grid named “spiral grid”.
Construct the grid like the following figure. (The grid is actually infinite. The figure is only a small part of it.)

Considering traveling in it, you are free to any cell containing a composite number or 1, but traveling to any cell containing a prime number is disallowed. You can travel up, down, left or right, but not diagonally. Write a program to find the length of the shortest path between pairs of nonprime numbers, or report it’s impossible.

[Input]
There are N test cases. The first line is N.
Each test case is described by a line of input containing two nonprime integer 1 <=x, y<=10,000.
[Output]
For each test case, display its case number followed by the length of the shortest path or “impossible” (without quotes) in one line.
[Sample Input]
3
1 4
9 32
10 12
[Output for Sample Input]
Case 1: 1
Case 2: 7
Case 3: impossible

2014
第一题: 二分查找
问题定义
大家一定都能熟练掌握二分查找啦!那么来计算二分的次数吧!
约定二分的中点mid = (left + right) / 2。
输入:
第一行输入一个整数N(N<=10000)。
第二行输入N个升序整数。
第三行输入一个待查找的整数(必定在第二行中出现过)。
输出:
输出二分查找该整数时,进行过多少次二分。
输入样例
5
18 53 54 74 99
53
输出样例
2
第二题: 计算两个字符串的编辑距离
问题定义
把两个字符串变成相同的三个基本操作定义如下:

修改一个字符(如把a 变成b)
增加一个字符(如abed 变成abedd)
删除一个字符(如jackbllog 变成jackblog)
针对于jackbllog 到jackblog 只需要删除一个或增加一个l 就可以把两个字符串变为相同。
把这种操作需要的最小次数定义为两个字符串的编辑距离L。
编写程序计算指定文件中字符串的距离。输入两个长度不超过512 字节的ASCII 字符串,在
屏幕上输出字符串的编辑距离。
输入样例
Hello world!
Hello word!
输出样例
13
第三题:二叉树遍历
问题定义
输入一棵二叉树,输出树的前、中、后序遍历结果。
输入一个整数N(N<= 10000),表示树中有N个结点(编号0~N-1)。
接下来N行,依次为结点0~结点N-1的左右孩子情况。
每行3个整数,F,L,R。L,R为F的左右孩子。L,R如果为-1表示该位置上没有孩子。
分三行分别输出树的前中后序遍历。
同一行中的数字,用一个空格间隔。
输入样例
5
0 3 1
1 2 -1
2 -1 4
3 -1 -1
4 -1 -1
输出样例
0 3 1 2 4
3 0 2 4 1
3 4 2 1 0
第四题:Hanoi 塔
问题定义
Hanoi 塔问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64 个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。
请编写程序,把A 柱上的n 个金片,搬动到C 柱(中间可以使用B 柱),使得搬动的次数最少。输入金片的个数n(1<=n<=64),输出总搬动次数,以及最后100 次搬动。如果搬动次数小于等于100 则全部输出;每个搬动占一行,加上是这第几次搬动的数字和”:”,格式见示例。
输入样例
2
输出样例
3
1:A->B
2:A->C
3:B->C

2015
今年3道题
1.给出长方形的长和宽,每次从长方形里撕去最大的正方形,输出最后能得到多少正方形
2.给出a,b,c(3个整数),判断a,b能否通过±*/得到c,ab可以交换位置,可以输出YES,不行输出NO
3.给出优先队列的实现,实现4个操作

• ADD N P:往队列里加入id为N的优先级为P的任务
• NEXT:输出下一个最高优先级的任务的id,如果优先级相同输出id小的任务,若队列中没有任务输出-1
• REMOVE N:移除id为N的任务
• COUNT:输出队列中的任务数量

第一道水题劳资居然超时啊,后来看不到分不敢提交
第二道也是水题,第三道直接用priority_queue感觉REMOVE可能会超时,我用的set和map做的

2016
第一部分 2016上机题目

第一题 给定两个字符串,求最大公共字串的长度 : 长度小于1000,两个for+string.find暴力可解

第二题 给定一个后缀序列,要求求值,只有加减(后缀倒是无所谓):
水题,后缀直接用栈做就好了,人家复试都是给前缀,要转换的

第三题 是给定一个字符串,求哈夫曼编码的最短长度:
哈夫曼树做,没什么特别要注意的,有好解法,因为你会发现就是求哈夫曼树的非根结点权值之和,或者所有非叶结点之和,想通了这题异常简单,
笨方法建树求高度乘上节点的值也可以,建立指针为叶子指向父结点的树型结构,具体题目要求忘了

总结:
1.暴力+dp
2.无括号直接加减入栈,乘除弹出运算然后入栈,最后求和
3.所有非叶节点之和
4.第一题暴力解法,设k1,k2代替i,j循环
5.栈和优先队列的结构声明和基本函数

2017
给定一个整数序列,求中位数。
给定一个9位数字的ISBN,求其校验位。ISBN格式为2-02-033598,校验位的计算方法如下:从左到右依次将各位数字乘10,9,8,……,2,求出其和S,作模运算得M=S mod 11。若11-M在1和9之间,校验位即为该数字;若11-M等于10,校验位为X;11-M等于11,校验位为0。输出添加校验位的ISBN,如2-02-033598-0。
一个无向图,顶点为N个,其中M条边已给定,现在要从K条备选边中选出若干条,使得整个图连通,且选出的边权值和最小。
2018
总共3道。 OJ 提交

1, 求众数。 众数就是一个序列中出现次数最多的数字。 如果不唯一,则输出小的那个值。 给定第一个代表有几个数字。 1<=n<=10^5 每个数字在 int 范围内

样例:
输入, (第一个代表有几个数字)
8
10 3 8 8 3 2 2 2

输出 2

2, 解方程。 给定一个字符串,代表一个 一元一次 方程。 如果有解求解,输出格式“x=数字” ,如果解的个数无穷,输出 “infinite solutions”。 如果 没有解输出“no solution”
字符串 长度不超过 256 。 样例:

10x-2x-8=4x+7+x

输出:
x=5

3, 骨牌。 有2n 的地板,用12和 2*1 的骨牌进行铺地板。问共有多少种情况。 结果对 999983 取余 。 1<=n<=10000 。 样例:

6

输出:
13

我的解法::
1, 第一题本来用 int num[] 开一个数组放里面记录次数的。但是后来发现 每个数字在 int 范围,开不了那么大,就 map 做了

2, 做的时间最长的题目,各位模拟吧。 记录左边的纯数字和,右边的纯数字和。还有 x 的两侧的系数和。如果 x 的系数不为0,则有解,如果为0,再判断左数字和 , 右数字和是否相同,判断是否解唯一。
注: 这个题我觉得有坑点。 首先就是 256 个字符,估计是大整数的,但是我来不及做,2个小时3道题。 另外就是题目没有说“给定序列一定满足是有意义的”。 也就是说 是否可能 没有 x ,没有等号呢,没有数字呢。 有的就不会成为有效地。 但是 3=8 这个要输出 no solution 的

3, 简单 DP 问题。 从第三个开始, dp = (dp[i-1]+dp[i-2]) % 999983

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值