1.多用陣列
2.排序
3.開檔讀檔
4.字串處理
5.寫程式過程
6.分配題目
7.測試資料
1.多用陣列
能用陣列解決的問題,儘量用陣列解決,
像是堆疊,佇列,二元樹等等等,都可以用陣列來處理,
節省寫程式的時間,比賽是看結果不看程式碼的。
2.排序
排序題目有特地要求要寫出哪個排序演算法,不然可以使用標準 C 函數庫,
省時間又不會出錯。
NAME
qsort,
heapsort, mergesort - sort functions
LIBRARY
Standard C Library (libc,
-lc)
SYNOPSIS
#include
void
qsort(void *base, size_t nmemb, size_t
size,
int (*compar)(const void *, const void *));
int
heapsort(void
*base, size_t nmemb, size_t size,
int (*compar)(const void *, const void
*));
int
mergesort(void *base, size_t nmemb, size_t size,
int
(*compar)(const void *, const void *));
簡單的數字陣列排序範例如下:
int array[20] =
{3,1,2,5,6,1,2,7,5,9,4,1,2,3,5,7,9,4,1,4};
int cmp(void *x,void *y)
{
return *((int *)x) - *((int *)y);
}
qsort(array,20,sizeof(int),cmp);
升冪降冪排序只要對調 x 跟 y 即可
3.開檔讀檔
一定要學會,善用
fscan,fgets,strtok,atoi,atof
fscan 用於固定長度的的資料,fgets 和 strtok
用來對付不定長度的資料
atoi 字串轉整數,atof 字串轉浮點數
fgets(buf,sizeof(buf),fp);
ptr = strtok(buf,"
\t\n");
do
{
......................
// ptr 一次指到一個資料
} while(ptr =
strtok(NULL," \t\n"));
4.字串處理
strcpy,strcat,memset,sprintf
使用範例:
strcpy,strcat
不用多說了
如果要產生一個字串,要 20 個 '-' 字元,一般人都會想用 for
來處理,
其實不用那麼麻煩,下面兩行就可以處理完畢。
char buf[21];
memset(buf,'-',20);
buf[20]
= '\0';
夠簡單吧,memset 還可用來初始化陣列,如:
int array[20];
memset(array,0,20 *
sizeof(int));
這樣就可以把 array 設定成都是 0 的陣列。
sprintf 用來標準輸出到字串內,結果就是跟 printf
印到螢幕一樣。
5.寫程式過程
盡量把每步的結果印在螢幕上,這樣比較好知道哪個步驟出錯
6.分配題目
一拿到題目不要馬上開始寫,先看完全部的題目,除非題目簡單到你看到題目
就可以開始寫到完,不然最好研究好方法在開始動手,這時另一人就看其他題目,
開始想好演算法,等對友寫完那題再開始寫。
如果做題過程中,有遇到重大錯誤沒辦法一下找出來,最好先換人寫,
不要浪費時間在
debug 上。
7.測試資料
一開始應該會給一些基本的測試資料跟正確答案,首先先把程式寫到能通過那些測試,
再來自己加一兩個資料,資料盡量以特殊的資料為主,如果特殊資料都可以過關,
那就送件等待結果吧。
注意程式資料的範圍,往往在極端的測試資料就是特殊資料。
特別注意:
1.如果有一道題目,他叫你寫程式說"如果有符合的答案就輸出該答案 沒有就輸出『no answer』
當你來不及寫這題的時候,就直接寫printf("no answer");
那五個測試資料通常就會矇到一兩個。
2.台北市資訊能力競賽的筆試,一般來說做前幾屆的考古題。如果有不會的再去查資料,因為筆試成績佔的百分比較低 一般還是以準備上機優先