《算法競賽經典》筆記

ch01 程序設計入門


const double pi = acos(-1.0);

提示:

  • 不要加sysytem pause或者get插入()讓程序按任意鍵退出
  • 一般情況下,你的程序不能直接讀取鍵盤和控制屏幕:不要在競賽中使用getch() getche() gotoxy() clrscr()函數
  • 不使用conio.h,腦韓getch() clrscr()等函數
  • 競賽中,輸出應以回車符結束,包括最后一行,輸出的兩個數或者字符串之間應該以單個空格隔開
  • 盡量使用const關鍵字聲明常數

ch02 循環(huán)結構


提示:

  • 如果有多個并列,情況不交叉的條件需要一一處理,可以用else if語句
  • 建議盡量縮短變量的定義范圍,例如,在for循環(huán)的初始化部分定義循環(huán)變量
  • 浮點運算可能存在誤差,注意浮點誤差
  • c99沒有規(guī)定int類型的確切大小,但是在競賽片平臺中,int都是32位的,及-2146483648~2147283647
  • 可以使用time。h和clock()函數獲得程序運行時間,常數CLOCKS_PER_SEC與操作系統(tǒng)有關,不要直接使用clock()的返回值,而應該總是除以CLOCKS_PER_SEC
  • 上述位避免輸入時間使用技巧“管道”,windows命令行執(zhí)行 echo 10(輸入)|abc(程序名稱)
  • 兩個小工具:輸出中間結果計時工具

算法競賽中的輸入輸出

  • 變量在未賦值之前的值是不確定的,特別的他不一定等于0

用文件:把輸入輸出保存在文件中,使用文件的最簡單的方法是使用輸入輸出重定向,需要在main函數的入口處加
freoprn("input.txt","r",stdin);
freopen("output.txt","w",stdout);

注意:事實上,不只是scanf和printf,所有讀鍵盤輸入,寫屏幕輸出的函數都將改用文件。(競賽前看相關讀寫規(guī)定,使用文件時注意文件名和路徑)

  • 主義在多數據的題目中,某些變量沒有重置會影響到下組數據的求解
  • 當嵌套的兩個代碼塊中有同名變量時,內層的變量會屏蔽外層變量,有時候會引起十分隱蔽的錯誤

ch03 數組和字符串


  • 比較大的數組應盡量生命在main()函數外,否則程序無法進行

  • a復制k個元素到數組b memcpy(b,a,sizeof(int)*k) 記得包含頭文件strig。h 如果全部復制到b中 memcpy(b,a,sizeof(a))

  • 字符串本質是數組。賦值 比較 鏈接 strcpy strcmp strcat 記得不能用= == +等運算符

  • 輸入字符串的方法:scanf("%s"),但是碰到空格和tab會停下來:
    解決方法:
    (1)fgetc(fin)讀取一個打開的文件fin,讀取一個字符,然后返回一個int值。讀取字符時應該檢查它不是EOF后再將其轉換成char值。
    從標準輸入讀取一個字符可以用getchar 等價于fgetc(stdin)
    以為不同os的回車換行不一樣,用fgetc和getchar時,應避免寫與操作系統(tǒng)相關的程序
    (2)fgets(buf,maxn,fin)讀取完整的一行放在字符數組buf中

  • 定義常量數組能簡化代碼,定義時候無須指明大小,編譯器會計算

ch03 函數和遞歸


  • c語言用調用棧(call stack)來描述函數之間的調用關系
    調用棧由stack frame組成,每個frame對應一個未運行完的函數

函數作為函數的參數

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容