2012年中科大考研上机机试试题(回忆版)

本次机试两个半小时,共5题。

1. 字符串处理:string.in文件里读入两个字符串,字符串除了数字还可能包括 '''E''e''',相加之后输出到文件string.out中,如果是浮点型,要求用科学计数法表示(最多包含10个有效数字)。

   Sample Input:                           Sample Output:

      34.56                                    2.7956e2

      2.45e2      


2. 最大公约数:number.in 文件中读入n个数,求出这n个数的最小值、最大值以及它们两的最大公约数,输出到文件number.out中。number.in中第一行为n,接下来为n个大于零的整数。   

   Sample Input:                           Sample Output:

      3                                        4 8 4

      4 8 6      

 

3. 任务调度:task.in 文件中读入任务调度序列,输出n个任务适合的一种调度方式到task.out中。每行第一个表示前序任务,括号中的任务为若干个后序任务,表示只有在前序任务完成的情况下,后序任务才能开始。若后序为NULL则表示无后继任务。

   Sample Input:                           Sample Output:

      Task0(Task1,Task2)                       Task0 Task1 Task3 Task2

      Task1(Task3)

      Task2(NULL)

      Task3(NULL)      


4. 火车票订购:火车经过X站,火车最大载客人数为m,有n个订票请求,请求订购从a站到b站的k张票,若能满足订购要求则输出1,否则输出0。数据从ticket.in中输入,第一行有四个数,分别为nm。接下来有n行,每行三个数分别为abk。结果输出到文件ticket.out中。

   Sample Input:                           Sample Output:

      5 10                                     1

      4 10 9                                   0

      8 12 2                                   1

      8 12 1                                   1

      14 20 8                                  0

      30 300 15      


5. 最短路径:n个城市m条道路(n<1000, m<10000),每条道路有个长度,请找到从起点s到终点t的最短距离,并且输出经过的城市的名,如果有多条,输出字典序最小的那条;若从st没有路径,则输出“can't arrive”。从road.in中读入数据,第一行有四个数,分别为nmst。接下来m行,每行三个数,分别为两个城市名和距离。输出结果到road.out中。

   Sample Input:                           Sample Output:

      3 3 1 3                                  2

      1 3 3                                    1 2 3

      1 2 1

      2 3 1



========================================================================================================================

    测试数据不完全一样,但题目意思是差不多的。这次机试,整体感觉难度一般,其中第1题有简单的做法,但是要熟悉scanf/printf的输入输出参数,如果真的当成字符串进行处理的话将会非常麻烦;第2题属于简单的题,主要是考辗转相除法求最大公约数;第3、5题是关于图的拓扑排序以及Dijkstra算法求最短路径问题,如果平时没写过相关的程序的话,这两题很难在考试的时候写出完整的程序;第4题将题目意思看懂也是一个简单的题。

    我拿到题目,先做第一题,当然第一想法是字符串处理,将输入的两个字符串先转化成double型数,写着发现很复杂,有正负、有小数点、有e,这要用编译原理里面的正则式来做多复杂啊....直接跳过去,发现第2题简单,先用了不到5分钟给敲完测试完了。扫了一下第5题,发现这是最短路径的问题,这题有信心可以搞定,与之前写的还是有区别,这题要考虑没有路径的情况以及还要打印路径。写完之后测试了几组数据,包括没有路径的,感觉差不多应该可以了。接着看第3题,看完题目明白是拓扑排序的题,但得提取出字符串中的数字作为图的顶点,写的还算比较顺的。又回到第一题,感觉应该第一题不应该会很难的,想到C语言标准输入/输出有相应的参数可以处理浮点数,但无奈却不记得了。使劲按F1试图找到MSDN,发现没有装。没办法,还是自己写字符串处理吧...写着发现没有信心把这个程序写完整,再次搁置。还有第4题,开始题目意思理解错了,写出来测试发现错了,又仔细读了一遍,OK,很简单的一个题,用一个数组保存每个站已经载的人数,对于每个请求,看看从a~b的区间中加上k是否有超载的即可。第三次回到第1题,想到有个atof()的函数可以将字符串转化为double型,果断用了,但输出怎么办,总是输出不了题目要求的那种格式。最后没办法自己写个函数将double型的m输出为科学计数法...用了一个log10()求出指数e,然后num/pow(10,e)得到有效部分,再追加输出一个字符e,以及指数的值,看着挺像的。真是折腾人,本来最简单的一个题,弄得最复杂了。

    对这次机试还挺满意的吧...全部5题做完之后还有二十分钟检查。


posted @ 2012-04-01 20:16  hazir  阅读(1056)  评论(0编辑  收藏  举报

一个代码可以创造一个世界,也可以毁灭一个世界!