摘自《王道論壇計算機考研機試指南》


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《王道論壇計算機考研機試指南》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM