首页 > 代码库 > 清华大学软件2014机试

清华大学软件2014机试

清华大学软件2014机试

 9月 24 2014 更新日期:9月 24 2014

今天刚刚机试完,乘者还没忘记,把自己知道的记下来,也算是泽被后来人吧~~~

这次的机试题,相对来说,会更简单一点,总共3题,时间是3小时。

1 超级幸运数

题目大致描述:

一个数字,若是只含有1和4,这个数字就是幸运数,例如,14,114。但是514这样的就不是了,因为含有其它数字。 若这个幸运数字中,1和4的数量相同,那么就是超级幸运数,例如14,1144,41等等。

题目要求,输入一个n,n的范围是[1,1e9],输出[1,n]的最大超级幸运数。无解的话,输出-1.

解题思路:

这个题目,当n<14,那么显然是无解的,其余情况,最起码还有14,其实就是当>=14的时候,找一个最大的就好了,那么最大有什么规律,假设输入的n有x位,当位数是奇数的时候,输出(x-1)/2个4,和(x-1)/2个1,就好了。如果位数是偶数的话,那么,要考虑一下一些情况了,因为输出是不能大于n的,并且4和1的个数相等。还有,注意这样的数据1000,它的输出应该是41。

一些测试数据:

in: 20 out:14

in: 10 out: -1

in:1000 out: 41

2 移动小球

有一些小球,1,2,。。。,n;
有两种操作,分别是

  • 1 x y ,把x移动至y的左边
  • 2 x y ,把x移动至y的右边

问得是,m次操作后,小球的顺序是什么..

其实就是这样的,原本1,2,3,4,5.(如果n=5的话)。经过1 1 4操作后,变成2 3 1 4 5

n数据范围[1,1000]

m 数据范围[1,200000]

解题思路:

双向链表就能够解决这个问题。再用一个数组存储这些个节点的位置。

测试数据:

in :

5, 2 (输入是 n m)

1 1 4 (表示操作,1,x, y)

2 4 2

out: 2 4 3 1 5;

3 整理书架

书店管理员要把书架上的书整理一下,其实就是一排书,让书的排序是按照书的高低,每本书有一个重量,重量越大,移动书时越费力,越累,让我们求的是,总的移动书本的最小重量是多少。

给出的数据是:

5(书的数量)

1 2 5 3 3 (表示书的高度)

1 1 3 1 1 (标示书的重量)

输出是2,

为什么是2,因为这里只需要把第4,第5本书移动到第三本书的前面,就能够保证书的有序,移动的重量和是2。

解题思路:

移动的重量和最小,其实就是求,不移动重量和的最大是多少。那么怎么求不移动的最大重量和呢?其实就是记录下每本书的位置,高度,重量,然后按照高度排序,排序完后,按照节点的位置,来求一个最大子序列,不过这个最大子序列,大不在长度上,而是重量和上,这样求出来的最大子序列重量和,就是不移动的最大重量和,总的重量减去它,就是我们要的答案

清华大学软件2014机试