兩個簡單題

一、兩個簡單題

接下來我們看到兩題 ACM 的簡單題,順便增加我們的解題數,這個單元中我們參考 Lucky貓的ACM園地 的中譯題目,分別是題號 1005510071 兩題。藉由這兩個練習題,從中學習如何撰寫 ACM 連續輸入的程式。

 

二、#10055 ─ Hashmat the brave warrior

說明:輸入兩個整數(232以內),輸出這兩個整數的差值(正數)。

這個題目很簡單,我們先寫成一般的程式,不過因為它要接受比較大的數,所以我們用超長整數( long long int )來處理,而超長整數在 scanf 及 printf 裡是用 %lld

#include <stdio.h>

void main()

{

 long long int a, b, c;

 scanf("%lld %lld", &a, &b);

 if(a>b) c=a-b;

 else c=b-a;

 printf("%lld\n", c);

}

接下來我們將它改成可以連續的程式,我們先用 while(1) 讓它成為無窮迴圈,在 C 語言中,只要條件式的結果不是 0 則代表成立,所以 while(1) 這樣的寫法代表永遠成立。接下來我們在迴圈內判斷 scanf() 的傳回值,如果不是我們要的參數個數,代表輸入結束,則用 break 跳出迴圈。程式改寫後如下(黃色為修改的部分):

#include <stdio.h>

void main()

{

 long long int a, b, c;

 while(1) {

   if(scanf("%lld %lld", &a, &b)<2) break;

   if(a>b) c=a-b;

   else c=b-a;

   printf("%lld\n", c);

 }

}

上面的程式寫好之後先把它存檔,接下來就可以進入這個網頁 http://acm.uva.es/problemset/submit.php 輸入題號及你的帳號,送出這個題目。如果帳號忘記了,打開上次註冊時用的信箱即可找到之前的帳號。

 

三、#10071 ─ Back to High School Physics

說明:輸入兩個整數 v、t,其中 v ( -100 < v < 100 ) 為某一等加速度物體在 t ( 0 < t <200 ) 秒時的速度,輸出該物體在 2t 秒後所經過的距離。

雖然該物體是等加度速,而且也不知道它的初速度,不過我們知道它在 0 秒的速度加上在 2t 秒時的速度,剛好就是 2v,平均速度還是 v,所以要求從 0 秒到 2t 秒的位移,只要用公式 位移=平均速度 × 時間,也就是 2*v*t 即可。下面我們還是先寫成一般的寫法:

#include <stdio.h>

void main()

{

 int v, t;

 scanf("%d %d", &v, &t);

 printf("%d\n", 2*v*t);

}

接下來再改成連續輸入的寫法:

#include <stdio.h>

void main()

{

 int v, t;

 while(1) {

   if(scanf("%d %d", &v, &t)<2) break;

   printf("%d\n", 2*v*t);

 }

}

 

上一頁

首頁

下一頁