天天看点

Programming Clip】06、07年清华计算机考研上机试题解答(个别测试用例无法通过)

1.清华计算机系研究生考试上机07年试题解答(自己今天上午做的,有一个不能完成所有测试用例~)

清华大学计算机科学与技术系

2007 年硕士研究生招生复试

2007 年 3 月 24 日

注意事项:

1. 试题共三题,总计 100 分,考试时间为一个半小时。

2. 不得使用自带的电子设备,包括笔记本、 U 盘、手机等;不得使用参考书籍和资料。

3. 编程环境为 Windows 2000 Professional + Visual Studio 6.0 ,只能使用 C/C++ 语言。

4. 每一题的输入数据都从文件 input.txt 中读取,将结果输出至文件 output.txt ,请严格按照每一题的输入输出格式 。在考试过程中,我们恕不提供除试题中样例以外的测试数据,请自行生成输入数据以对程序进行自测。

5. 在考试结束之前自行设置编译环境和配置编译参数,将所写的程序编译成可执行文件,文件名在每一题中都有规定。生成的可执行文件将作为最终测试的唯一依据,若无法运行您的可执行文件,最终成绩将记为零分。

6. 程序对每个测试数据的可用运行时间上限 1 秒,若超时或结果错误,则该测试用例不能得分。

7. 在考试过程中,若计算机出现故障,请及时通知工作人员,以免耽误您的考试时间。

8. 上机考试结束后,请勿马上离开,工作人员将会直接进行现场测试,需要您的合作。

第一题(可执行文件名 program1.exe )

求正整数 N(N>1) 的质因数的个数。注意: 1 不是 N 的质因数:若 N 为质数, N 是 N 的质因数。相同的质因数需要重复计算。

如 120=2*2*2*3*5 ,共有 5 个质因数。

输入:

正整数N ,1<N<109

输出:

N 的质因数的个数

样例输入:

120

样例输出

5

第二题(可执行文件名:program2.exe )

对于一个十进制数A ,将A 转换为二进制数,然后按位逆序排列,再转换为十进制数B ,我们乘B 为A 的二进制逆序数 。

例如对于十进制数173 ,它的二进制形式为101011101 ,逆序排列得到10110101 ,其十进制数为181 ,181 即为173 的二进制逆序数

一个1000 位( 即2999 ) 以内的十进制数。

输入的十进制数的二进制逆序数。

173

样例输出:

181

(下列程序只能忍受部分测试用例)

第三题(可执行文件名program3.exe )

有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。

如,有1 分,3 分,3 分,3 分,4 分五张邮票,要求凑成10 分,则使用3 张邮票:3 分、3 分、4 分即可。

首先是要求凑成的邮票总值M ,M<100

然后是一个数N ,N 〈20 ,表示有N 张邮票。接下来是N 个正整数,分别表示这N 张邮票的面值,且以升序排列。

能够凑成总值M 的最少邮票张数。若无解,输出0 。

10 5 1 3 3 3 4

3

分析:这是最简单的背包问题,动态规划的方法,写得不是很规范,不过结果很不错,线形复杂度 ~~

2.清华计算机系研究生考试上机06年试题解答(自己今天下午做的,郁闷之中。。。做的时间太长)

一、输入:两行

第一行:M和N

第二行:X

M和N是一个十进制数,M和N都在[2-36]之间,X是一个M进制数,X在[1-2*10^19]

输出:一行

第一行:现在要求你将M进制数X转换成N进制数输出

输入一:

16 10

F

输出一:

15

二、按照手机键盘输入字母的方式,计划所花费的时间

如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。

如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下

如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按 C。

现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。

现在给出一串字符,需要计划出它所需要花费的时间。

输入一:bob

输出一:7

输入二:www