网易互娱雷火事业群笔试-游戏研发工程师(第二批)

时长:120分钟 总分:100分

207浏览 0人已完成答题

题型介绍
题型 填空题
数量 6
1.
矩形排序
问题详情

【注意:本题按通过的Case比例给分】

给定N个矩形,每个矩形宽W米高H米
请按以下规则将这N个矩形排序,输出排序后的矩形列表

排序规则:
面积小的矩形排在面积大的矩形前面
面积相同的矩形,按照宽高比排序,宽高比大的矩形排在宽高比小的矩形前面
宽高比的定义为 min(W/H, H/W)
面积和宽高比都相同的矩形,按照宽排序,宽度更小的矩形排在宽度更大的矩形前面


输入描述: 每组输入两行输入

第一行是一个整数N (0 < N <= 100)

第二行是2*N个整数,分别是每个矩形的宽W和高H,(0 < W,H <= 100)输入样例: 2 2 2 1 1 输出描述: 每组数据输出一行,2*N个整数,分别是排序后的每个矩形的宽W和高H输出样例 1 1 2 2
2.
三角网格
问题详情

【注意:本题按通过的Case比例给分】

三角网格是计算机图形学中表示物体的常用形式,我们常用一个顶点索引和三角形索引表示具体网格。
在一个三角网格中,如果两个三角形共用同一条边则称这两个三角形是相连的,如果一个三角网格的任意两个三角形都直接或间接相连,则称这个三角网格是连通的。
如果一个三角网格可以展开成平面图,这称这个三角网格为平面三角网格,在平面三角网格中,单个三角形的顶点可以有顺时针或者逆时针两种排列,代表了三角形两种不同的朝向。
给定一个N个顶点,M个三角形组成的平面连通三角网格,需要你调整所有三角形索引的顶点顺序,使得所有三角形都和输入的第一个三角形具有相同的朝向,并且在每个三角形内部,序号最小的顶点放在首位。

输入描述: 第一行,两个整数N,M 表示有N个顶点和M个三角形 (3<=N<=400, 1<=M&lt800)
接下来M行,每行三个数字Ai, Bi, Ci(1<=Ai<=N, 1<=Bi<=N, 1&ltCi<=N),表示第i个三角形的顶点序号输入样例: 6 4 3 2 4 1 3 2 3 6 5 5 3 4 输出描述: 输出M行,每行三个数字,表示调整后的三角形顶点索引,输出的三角形顺序需要和输入保持一致。输出样例 2 4 3 1 2 3 3 5 6 3 4 5
3.
钱老板赶工
问题详情

【注意:本题按通过的Case比例给分】

钱老板去国外度了个假,刚回到公司就收到了 n 封催促工作完成的邮件。
每项工作都有完成截止日期 deadline,钱老板做每项工作都会花去cost天,而且不能中断。
请你帮钱老板安排一下完成工作的顺序,以减少总的工作推迟时间。

输入描述: 第一行包含一个正整数 n(1<=n<=20),表示工作数量。

接下来 n 行,每行包含两个整数,分别表示第 i 项工作的 deadline 和 cost。输入样例: 3 3 3 8 1 3 2 输出描述: 一个数字,表示钱老板最少需要推迟几天才能完成所有工作。输出样例 2
4.
最简分数
问题详情

【注意:本题按通过的Case比例给分】

分数的分子和分母为互质数的分数叫最简分数。 最简分数的分数的分子与分母没有除1以外的其他公约数。 最简分数又叫既约分数,既约分数可理解成已经约分过的分数,也就是分子和分母是互质数的分数。
例如:
2/3, 1/10, 99/100 等等都是最简分数

2/4, 5/10, 20/30 等等都不是最简分数

对于任意一个正整数N,以N为分母并以小于等于N的正整数作为分子的分数都有N个
例如,当N=6时,一共有以下6个分数:
1/6, 2/6, 3/6, 4/6, 5/6, 6/6
其中的最简分数有两个,分别是:
1/6, 5/6

我们定义一个叫做“最简分数比”的函数F,这个函数的定义是:

F(x) = (以x为分母并以小于等于x的正整数作为分子的最简分数个数) / x

例如,F(6) = 2/6 ~= 0.333333

在这个问题中,只有一个输入数据N,请计算出所有小于等于N的正整数中,最小的F(n)数值,换句话说,对1到N的所有正整数x都计算F(x)并找出这N个F值中的最小值Fmin

输入描述: 一个正整数 N (1 <= N <= 1000000000)输入样例: 10 输出描述: 一个小数Fmin,输出请四舍五入到小数点后6位输出样例 0.333333
5.
小军砌墙
问题详情

【注意:本题按通过的Case比例给分】


小军接到一项工作,要用红色和绿色两种砖块建一面宽度W高度H的墙

小军只有以下两种砖块可以用:


红色砖块宽度2,高度1

绿色砖块宽度3,高度1

 

每种砖块只能按照以上的横向摆放,不能竖起来

横向两块方块之间是有缝的,因此为了让建好墙更稳固,小军会避免在任意相邻的两行间,除了左右两侧以外,出现任何上下对齐的砖缝,请参看下图:


上面一种建造方式是允许的,而下面一种建造方式不允许

特别的,下面这两种宽度为32的墙也是允许的


给定一面墙的宽度和高度后,请帮小军计算在以上规则允许的前提下,一共有多少种不同的建墙方式


输入描述: 两个整数 W 和 H (2 <= W <= 30, 1 <= H <= 10)输入样例: 5 2 输出描述: 一个整数,所有可能建墙方式的数量。这个数量可能会大于32位整数的表示范围,请用64位整数输出样例 2
6.
文本编辑器
问题详情

【注意:本题按通过的Case比例给分】

本题需要让你实现一个类似vi的基于命令模式的文本编辑器,但仅需要少数几个命令。

先介绍一下光标(上图中最左边的是编辑器显示的行号,用来展示用,并不是文本真正的内容,请忽略)

1.该编辑器里的光标是类似vi编辑器里命令模式那样,停留在一个字符上方,而不是字符与字符之间。

2.编辑器文本为空的时候(初始时,或者把内容全部删除以后),会显示一个空行,光标停留在那行行首(如图1)。此时执行o命令的话,在下方插入一行(如图2)。

3.当光标停留在一个空行的时候,光标会显示在行首,但此时执行i命令和a命令的效果是一样的(如图3)。


再介绍一下撤销(undo)和重做(redo)命令:

1.编辑器的undoredo操作跟vi编辑器的一样,是一个基于栈式的撤销功能。每当玩家输入一个命令的时候,如果可撤销的话(见第二条),就该操作压进Undo栈里,栈的大小为无限大,允许撤销全部的操作。

2.只有真正改变编辑器内文本的命令才会进入Undo栈,比如g命令,以及未对文本发生修改的d命令,还有undoredo命令本身都是不可撤销的,即不会进入Undo栈。

3.当执行undo命令的时候,如果Undo栈里有元素,则从栈顶弹出最后一个命令,撤销掉该命令,光标回到执行该命令前的位置,并且将命令压入Redo栈里。

4.当执行redo命令的时候,如果Redo栈里有元素,则从栈顶弹出最后一个被撤销的命令,重新执行该命令,光标回到执行该命令后的位置,并且将命令重新压入Undo栈里。

5.当执行undoredo命令的时候,如果相应的栈里没有元素,则不进行任何操作,忽略该命令。

6.当执行任何输入的命令的时候,都会清空Redo栈,即用undo撤销一个命令C的时候,再执行输入的其他命令以后,则不能再用redo功能重做上一次撤销的命令C

 

完整的命令列表为:

 g x y: 移动光标命令,将光标移动到第x行,第y列上方。当x超过总行数时,则为最后一行。当y超过该行列数的时候,则为最后一列。

i str:在光标所在字符前插入str这句话,光标最终会停留在这句话的最后一个字符上。注意,str必定不为空,但是里面可能包含空格。

a str:在光标所在字符后插入str这句话,其他同上。

o str:在光标所在行的下面另起一新行插入str这句话,其他同上。

dd:删除光标所在行,光标最终会停留在下一行的首字符上。如果删除的是最后一行,则停留在最后一行的首字符上。

d n:从光标所在位置开始,往右删除n个字符(输入保证n&gt0),最多只会删除到行尾,不会跨过当前行。光标最终停留在删除以后的下一个字符位置上。

undo:撤销上一个对文本发生改动的命令,光标也回到上一个命令执行前所在的位置。如果没命令可以撤销,则什么都不做。

redo:重新执行上一个撤销的命令,光标也回到上一个命令执行后所在的位置。如果没有已经撤销的命令,则什么都不做。注意,如果undo了一个命令,再执行新的命令,则也不能redo

其中命令名字与参数、参数与参数中间都是用一个空格分割

 

下图为测试用例例子里的的编辑器里的展示



输入描述: 每个测试输入包含1个测试用例

输入的每一行为一个命令,请处理到输入结束,输入最多不超过1000行,且每行均为合法的命令

输入保证每一行输入的最大字符数不超过1000个字符,且只包含英文、数字和空格输入样例: i abcdef o abcd g 1 10 a abcdef d 4 undo redo dd dd dd a hello world 输出描述: 请输出编辑器打开以后(初始状态),执行完输入命令以后,最后显示的文本输出样例 hello world