2008年2月3日 星期日

Problem 617 Nonstop Travel,回家一路綠燈

這題是要從時速30哩到60哩之間,算出所有可以在回家時,一路綠燈的速度。每個人偶爾都會經歷一路綠燈的經驗,解這題時,我卻沒有一路綠燈。首先是列印解答時,格式的要求有點龜毛,要考慮好幾種不同的可能,要兼顧頭尾、「-」、「, 」等情形,所以這題非常適合作為if-else的邏輯練習,做完會很有成就感。其次是fmod與一般%餘數運算的差異,改用fmod後,一下就過關了。
我用到結構,因為在參數傳遞時,只要將指標傳過去,比較簡潔。結構如下:

struct traffic
{
float distance;
int green, yellow, red;
};

下列是函數呼叫,用來檢驗速度sp在某燈號下的紅黃綠燈。記得要用fmod,一下就過了。

int checkLight(int sp, struct traffic *lptr)
{
float tm; /* in second */
float lightTime;
int cycleTime;
tm = lptr->distance/sp*3600;
cycleTime = lptr->green + lptr->yellow + lptr->red;
lightTime = fmod(tm, cycleTime);
if (lightTime>lptr->green + lptr->yellow)
return 1;
else
return 0;
}

p617題目連結
回ACM題庫目錄
回首頁

1 則留言: