中山大学软件工程c语言,2018中山大学软件工程专硕考研经验分享

我本科是本校的软件工程,17年8月开始准备考研。初试前每天复习9小时,复试前因为忙着毕设没怎么准备。=============================初试===================================

初试考4门课:政治,英语2,数学2和计算机综合(408)

政治复习的时间最久,用的是肖秀荣全套。可惜我记忆力不太行,记的内容全在题目材料上。略尴尬,只有60多分

英语2的话我只做了一遍最近10年的英语1真题和两遍英语2真题,晚上睡觉前和早上起来还用百词斩记15分钟单词,正式考试的时候发挥得也一般,只有80多分。

数学2我用的是张宇1000题,高等数学18讲,线性代数9讲和最后四套卷。实际考试的时候考了一道摆线积分,最后四套卷里面也有类似的。然而我觉得不太可能考,就没去深究。不得不说的是张宇最后四套卷难度非常大,比今年号称历年最难的数学2还难上几分。

计算机综合当然推荐王道论坛的书啦。因为考研的内容和平时上课讲的有点不一样,所以我买了全套。最后也考得还行,有110多分。

因为我是本专业的学生,而且也用了不少时间复习,初试的话感觉还算比较稳,总分350多,排名40多

============================复试=====================================

复试分为笔试,面试和机试。

按重要度来排序的话应该是面试最重要,笔试次之,机试最后。

复试满分500分,其中笔试100分,面试400分(其中包括英语阅读翻译100分)。机试只是作为参考。

============================面试======================================

面试首先抽一段和本专业相关的英语,首先给一点时间阅读,然后要朗读和翻译。我拿到的那段讲的是平面图着色问题。然而因为没有复习,不知道planar graph就是平面图....结果就只有70多分。

然后开始面试。问了我几个问题:

1.讲讲P和NP的区别

2.planar graph是什么意思(我在翻译的时候跳过了planar..面试的时候又问我一遍)

3.讲几个离散数学的定理

4.讲讲warshall定理

5.讲几个著名的定理

6.讲讲你做过的项目

然而我记忆力比较差,也没有怎么准备,答得不太好。

==========================笔试=========================================

笔试分为离散数学和c语言设计

离散数学今年考得还算比较简单,考了40多。

第一题是将命题符号化,并证明这些命题是一致的(即存在一组取值使得这些问题都为真)

第二题是用谓词和量词将命题符号化

第三题是集合的运算,画Venn图即可

第四题是证明等价关系:已知Q是等价关系,S是等价关系,证明QoS也是等价关系

第五题是用dijkstra算法计算最短路径

c语言今年难度一般

有10道选择题,5道判断题,1道编程题。

选择题和判断题考的是c语言的语法。印象中有几道指针数组的。

编程题考的是文件操作,字符串操作和排序。

我对于比较少见的语法还是不太熟悉,所以只有30多分。

=========================机试=======================================

机试不算分,但会作为面试的参考。

听说有同学机试成绩比较低在面试的时候被导师说了。

建议跨考或者写程序不熟练的同学去刷点题,可以在leetcode或者在hdu,poj,zoj等等oj上刷。

今年机试题目是中文的,难度一般。

在考试之前有三套模拟题,共23题,

正式考试是10题,3小时内完成。

难题作用其实不大,毕竟机试第一的那个人面试才250多分,加上英语就330多。

在最后我会分享这33题里最难的5题,难度从易到难排序。实际作用不太大,有兴趣同学的可以看看。

由于篇幅问题,代码分享于百度网盘。如有错误,欢迎指正。

https://pan.baidu.com/s/1PIPutqUyTGS7_aZh3MBE1w

提取码:3tbe

祝大家顺利考上喜欢的学校~

=======================机试题目分享====================================

1.k-马问题(模拟考试)

题意:在一个m*n的棋盘上有一些马,马跳一步可以往水平方向跳2格,往竖直方向跳1格,或者往水平方向跳1格,往竖直方向跳2格。

k-马一次最多可以跳k步。问这些马能否跳到同一格内?若可以,则输出最少需要的次数,若不可以,则输出-1

输入格式

第一行为一个数t,代表有t组测试用例

每组数据的第一行为两个数m,n,代表棋盘的行数和列数

以下m行每行有n个字符(0

字符‘.’表示空棋盘,数字k表示该格子上有一个k-马,即该马一次最多可以跳k步。(0

输出格式

输出t个数,第i个数代表第i个测试用例的答案

样例输入

3

3 3

1.1

...

...

3 3

1.2

...

...

2 3

9..

.8.

样例输出

2

1

-1

题目分析:

题目的意思就是求从多个起点出发走到终点最少需要的次数。由于从m个起点出发要重复多次计算,所以我们枚举所有马走到的终点,将其作为起点。

然后从起点出发,广度优先搜索,计算到走到每个马位置的步数,转换为次数以后加起来即可。

复杂度O(m^2n^2)注意若有一个马无法到达,则输出-1

2.旅游问题(正式考试)

题意:有n个城市,每两个城市之间都有铁路和航班。坐飞机的时间是坐铁路的一半。以邻接矩阵的形式给出城市间坐铁路所需的时间(保证反自反和对称即aii=0,aij=aji),

求:在最多坐k次飞机的情况下,从城市1到城市2最少需要花费的时间。

输入格式:

第一行一个数t,代表测试用例个数

接下来对于每个测试用例,

第一行两个数n(n<100)和k(k<50),代表城市个数和最多坐的飞机次数

接下来n行每行n个数。是这n个城市的邻接矩阵。

输出格式:

输出t个小数,第i个数代表第i个测试用例的答案,输出保留一位小数。

样例输入:

3

3 0

0 3 1

3 0 1

1 1 0

3 1

0 3 1

3 0 1

1 1 0

3 2

0 3 1

3 0 1

1 1 0

样例输出

2.0

1.5

1.0

题目分析:

题目大意是求两点间最短距离。这里有个转弯的地方就是可以坐飞机。将一个点拆成k+1个点。分别代表在这个城市已经坐了0到k次飞机。

然后就可以用dijkstra算法或者spfa等等求解了。

3.最大集(模拟考试)

题意:给定n个数,在这n个数里任意取出k个数,使得这k个数两两互质。求k的最大值

输入格式:

第一行一个整数t,代表有t个测试用例

对于每个测试用例:

第一行一个整数n,代表有n(n<50)个数。

第二行n个正整数(每个数在100以内)。

输出格式:

输出t行整数,第i行表示第i个用例的答案

样例输入:

2

3

6 10 15

5

1 2 9 12 97

样例输出

1

4

题目分析

乍看之下是求最大独立集。这是个NP问题,网上可以查到较好的方法求解。但是通过分析输入规模,并不需要用到

最大独立集。由于每个数在100以内。所以与50以上的质数不互质的数只会是这个数本身。所以只需要对50以下的

质数进行分析。由于50以内的质数只有14个,所以我们可以用状态压缩动态规划。将每个数分解质因数,然后进行

状态压缩。如果某个数含有第i个质因子,则将它的第13-i位置为1。如:整数140=2^2*5*7,2是第一个质数,5是

第三个质数,7是第四个质数则10可以表示为二进制1101,即13。然后进行dp:

dp[j|a] = max(dp[j|a], dp[i - 1][j] + 1)(j&a== 0)

4.数字(正式考试)

题意:有一个很喜欢数字4和7。他喜欢用数字4和7组成很多新的数,如:44,47,774等等。他将这些数称为B数

(忘了叫啥了)给定一个只含数字和问号的字符串,问号可以代表'0','1',...,'9',问这个数能不能表示成两个B数

相加。如:1?1可以是121,而121=44+77,可以表示成这两个B数相加。若不可以,则输出-1,若可以,则输

出最小的数。如:1?1可以是151=74+77,但121<151,所以应该输出121.

输入格式:

第一行一个整数t,代表有t个测试用例

接下来t行每行一个只由数字和问号组成的字符串。

输出格式:

输出t行整数,第i行表示第i个用例的答案。

样例输入:

5

1?1

2??

1?

???????

1?2?2?

样例输出:

121

-1

14

1188888

122221

题目分析:

这道题目有点复杂,细节比较多。仔细分析可以发现每一位只能影响它的前一位和后一位。

记n为字符串的长度,则分两种情况:

1.两个加数都是n-1位。这样的话第一位一定是1

此时可以从最后一位开始检查到第三位,并记录进位情况,遇到问号,则贪心取值

(如必须进位则取1+后一位的进位,否则取8+后一位的进位)

此时又分四种情况:

(I)上一位是2,9,5,说明这一位要进位

(II)上一位是1,8,4,说明这一位不能进位

(III)上一位是?,那这一位可以进位也可以不进位。

(IV)其它,则不合法

第二位的取值只能为1+后一位的进位或4+后一位的进位。

2.有一个或者两个加数是n位

因为两个数可能位数不一样,所以可以枚举较小数的位数。

从最后一位开始检查到第二位,具体步骤和1中一样,但是注意当检查过了较小数的位数时,

数字会不一样了,而且也不会再出现进位了。

如最高位是问号,则其取值看次高位是否可以进位

若必须进位或可以进位,则最高位取1

否则取4。

细节请看代码。

5.马周游问题(第一天测试题)

据说这题是上一届考试最难的一题。题意描述得不是太清楚,但大概做法能猜到,在网上也能搜到

http://www.xuebuyuan.com/2054151.html

你可能感兴趣的:(中山大学软件工程c语言)