摘自《王道论坛计算机考研机试指南》

2020-02-11


实现梦想其实没什么诀窍,就是比别人早起一点,晚睡一点,比别人早准备一点,勤奋一点。考研也一样。


一个写不出合格代码的计算机专业的学生,即便侥幸考上了研究生,也不过是给将来的失业判个缓期执行而已。


 【1_从零开始】

  • 机试考察的能力:
    1. 将实际问题抽象成数学问题
    2. 将专业知识运用到数学模型
    3. 将设计的算法编写成可执行程序

  (其中包括1:会编写经典算法的程序代码 2:能将自己设计的算法转换为程序代码 3:健壮性,即所写程序能应对各种测试数据)

  • 特殊判题(Special Judge):此类题可能存在多个符合条件分答案,要求输出任意一组解即可
  • 大多数考题只对时间做限制,此时要有空间换时间的思想。11:52:07

【2_经典入门】12:25:59

【2.1_排序】

 

【2.1.1_对基本数据类型排序】

 

  • 需要连续测试多组数据时,循环条件该怎么写?
while(scanf("%d",&n)!=EOF)
  1. scanf()是有返回值的,它将返回输入函数成功赋值的变量个数(此例中为1个,即n)
  2. EOF(end of file)的值为-1,当scanf函数不再为n赋值时返回EOF,跳出循环
  3. 使用该循环判断条件是为了:既能测试多组数据,又能在输入结束后正常退出。
  • 不同编译环境下for循环中指示变量 i 的作用域不同
  1. C++标准中,i 的作用域仅限于for循环内部;于是我们可以在多个for循环中都重新定义变量 i
  2. VC6.0中,在退出for循环后,变量 i 依然可见;因此在后续for循环中不必重新定义 i ,只需将 i 初始化即可。
  • 冒泡排序
1 for(int i = 0; i < n; i ++){
2     for(j = 0; j < n-1-i; j ++){
3         if(buf[j] > buf[j + 1]){
4           int  tmp = buf[j];
5           buf[j] = buf[j + 1];
6           buf[j + 1] = tmp; 
7       }  
8   }
9 }

C++有快速排序库函数,可通过包含#include<algorithm>头文件后直接调用

  • sort(first,last,cmp)函数

可省略第三个参数,此时默认为升序排列

若想得到降序排列的结果,可以改写cmp(),默认return x<y; 改为 return y<x;13:52:24

sort()函数根据小于运算符“<”来定序,小者在前。

【2.1.2_对结构体排序】

  •  重新定义比较函数cmp()
 1 struct stu{
 2      char name[101];
 3      int age;
 4      int score;
 5  }buf[1000];
 6  bool cmp(stu a, stu b){
 7      if(a.score != b.score) return a.score < b.score
 8      int tmp = strcmp(a.name , b.name);
 9      if(tmp != 0) return tmp<0;
10      else return a.age < b.age 
11 }   
  • 另外,还可以在stu结构体内重载“小于运算即operator <(),来说明排序规则,此时sort()函数不必使第三个参数。(提倡使用)
 1 struct stu{
 2 char name[101];
 3 int age;
 4 int score;
 5 bool operator < (const stu &b) const {
 6   if (score != b.score) return score < b.score;
 7   int tmp = strcmp(name , b.name);
 8   if(tmp != 0) return tmp < 0;
 9   else return age < b.age;          
10   }
11 }buf[1000];

【2.2_日期类问题】

【2.2.1_日期差值(区间问题)

Guide:把原区间问题统一到起点确定的区间问题上

比如该日期与原点时间0000年1月1日之间的天数差

这样可以在程序真正开始之前进行预处理——算出所有日期与原点日期的天数差并保存起来

  • 需要开辟大量内存空间(如buf[5001][13][32])时
  1. 定义在函数体外,即全局变量
  2. 在函数中用malloc等函数动态申请变量空间

预处理是空间换时间的重要手段。

  • 闰年
1 #define ISYEAP(x) x % 100 != 0 && x % 4 == 0 || x % 400 == 0 ? 1 : 0

定义一个用来判断是否是闰年


将数据本身与数据的存储地址联系起来,是Hash的基本思想。

  • 对于最常见的时间限制 1秒,算法复杂度通常不能超过百万级别(7位),最多7位

【2.2.2_求星期几】2020-02-11 18:05:25

 2020-02-12 10:46:57

法一:

  思路:仍以0000年1月1日为原点日期,处理出每个日期与原点日期之间的天数差,再求出给定日期与今天之间的天数差,又知道今天是星期几,对天数差除7取余即可。

法二:

利用蔡勒(Zeller)公式,具体如下 图片内容来自知乎https://zhuanlan.zhihu.com/p/79290515

 

——From《王道论坛计算机考研机试指南》

猜你喜欢

转载自www.cnblogs.com/onemorestep/p/12294060.html
今日推荐