ACM題目特點: 由于ACM競賽題目的輸入資料和輸出資料一般有多組(不定),并且格式多種多樣,是以,如何處理題目的輸入輸出是對大家的一項最基本的要求。這也是困擾初學者的一大問題。
ACM的輸入輸出要求嚴格按照規定來,是以你不需要輸出像"Please input the data"這類的提示語。否則将會被判Wrong Answer。
輸入 初學者一般有個誤區:如果題目包含多組測試資料,他們就會把輸入的内容全部儲存起來,然後再依次處理。
其實程式的輸入\輸出是互相獨立的,是以,每當處理完一組測試資料,就應當按題目要求進行相應的輸出操作。而不必将所有結果儲存起來一起輸出。
下面來介紹一下ACM中常見的一些輸入情況。
隻有一組測試資料
這類題目是最簡單的,比如第1000題。參考代碼:
#include
int main(void)
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
return 0;
}
沒有明确指出輸入什麼時候結束
如果是這種情況,我們預設是以“檔案結束”(EOF)為結束标志。
這是ACM的默規,例如1076題。參考代碼:
#include
int main(void)
{
int a, b;
while (scanf("%d %d", &a, &b) != EOF)
printf("%d\n", a + b);
return 0;
}
指定資料量
有時會在資料的第一行提供資料量大小,比如第一行是100,則表示有100組資料
比如第1077題。參考代碼:
#include
int main(void)
{
int n, a, b;
scanf("%d", &n);
while (n--)
{
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
}
return 0;
}
以特定元素作結束符
這種輸入和第一種類似。常見的是規定以0作為結束符。
比如第1078題。參考代碼:
#include
int main(void)
{
int a, b;
while (scanf("%d %d", &a, &b), a || b)
printf("%d\n", a + b);
return 0;
}
輸出 輸出格式統一
這種比較簡單,隻要按要求來就沒問題的。
比如每組輸出占一行,或者每組輸出後面加一個空行。比如1000題。
資料之間有空行
對于這種輸出,有時候還會告訴你有幾組輸入,這樣你就可以自己判斷一下是不是最後一組。是就不輸出空行,否則多輸出一個空行。
而有時候連共有幾組資料都不會告訴你。其實不論知不知道有幾組資料,我們都可以這樣處理。
第一組資料後面不加空行。
第二組開始,每組前面加空行。
比如第1079題,參考代碼:
#include
int main(void)
{
int a, b, i = 0;
while (scanf("%d %d", &a, &b), a || b)
printf((i++? "\n%d\n": "%d\n"), a + b);
return 0;
}