天天看點

acm 輸入輸出

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;

  } 

   

繼續閱讀