本文为2011年中科大计算机学院复试机试刷题记录,使用C++作为编程语言,并在Linux 平台下使用gcc编译器进行编译以及测试运行。输入输出风格偏向于C,有些题目会用到C++的STL标准函数库。
题目详解
进制转换
给两个十进制数,先异或,然后输出其二进制形式。
C语言中的printf函数可以直接打印十进制,八进制,十六进制,输出控制符分别为%d,
%o, %x, 但是它不能直接输出二进制,所以这里考虑使用位操作输出二进制。
1 |
|
运行与测试:
1 | g++ -o ex1 ex1.cpp |
球的取法
一共有十二个球,其颜色有红、黄、黑三种,红黄黑分别有 x,y,k 个,现在从其中取出八个球,共有多少种取法,输出到文件中?(x,y,k 从键盘输入,同种颜色的球不区分)
输出格式:
1 | 1. 红球, 黄球, 黑球; |
- 思路
直接用双重循环暴力枚举前两种球被抽到的个数。注意这题要求输出到文件,使用C语言的fprint函数。
1 |
|
- 运行与测试
1 | g++ -o ex2 ex2.cpp |
模式匹配
在文件3.txt中查看是否有模式abc*d?e。若有,输出找到abc*d?e匹配;若无,则输出没有找到abc*d?e匹配,将结果输出到控制台。其中*代表任意个数(0或1或多个),?代表一个或零个,即正则表达式。
- 思路:本题可以采用《编译原理》里面的确定的有限状态机(DFA)解决。先画出模式的DFA图,然后根据 DFA 列出如下的状态跳转表,之后我们就可以采用 表驱动法 进行编程实现了。可以参考力扣题目:65. 有效数字,也是有关DFA的,有很详细的解答。

| state | a | b | c | d | e |
|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 1 | 1 |
| 2 | 2 | 3 | 1 | 1 | 1 |
| 3 | 2 | 1 | 3 | 4 | 1 |
| 4 | 2 | 1 | 1 | 4 | 5 |
1 |
|
- 测试:
1 | //3.txt |
二叉树后序遍历
从文件4.txt中读入一个二叉树,然后后序遍历该二叉树,将结果输出到文件4.out。
1 | 输入格式: |
- 思路
这题的得分点其实挺多的,写出来树节点的结构体,创建树等等。读入每行树节点时,可以使用一个数组记录每个子树根节点的指针,方便使用节点编号就可以直接访问节点,从而添加孩子节点,最后从根即可访问到所有节点。
1 |
|
- 测试
1 | // 4.txt |
参考链接
中科大计算机考研复试详解 这篇有很详细的复试介绍以及资料,非常推荐!