2009年5月16日 星期六

倒數計時器

當兵最在意的事是什麼呢?對我而言就是還剩幾天才能拿到退伍令。所以我就決定用JavaScript來寫一個倒數計時器放在部落格上。

<script language="JavaScript">
var today = new Date();
var endDay = new Date(2009, 9 - 1, 16);

var diffDay = (endDay.getTime() - today.getTime()) / (24 * 60 * 60 * 1000);

diffDay = Math.ceil(diffDay);
var message = diffDay <= 0 ? "已退伍" : "離退伍還剩" + diffDay + "天";
document.write("<b>" + message + "</b>");
</script>

程式很簡單,就單純把兩個時間相減即可。另外在最後再做個判斷是否時間已經到了,以免輸出負數的日期。

要注意一點的是new Date(年, 月 - 1, 日),月份是從0到11,所以要減1才是正確的日期。

2009年5月7日 星期四

UVa 112 - Tree Summing

面對UVa 112 - Tree Summing這一題,一開始我的想法是要先將整顆樹建立起來,再從root拜訪到leaf。但再仔細研究一下,其實不需要建立樹,用遞迴的方式,很快就能解出。遞迴想法很容易,簡單述說如下:

1. 從root開始,將value傳給左右子節點。
2. 子節點將value與父節點傳來的value相加,再將value傳給自己的左右子節點。
3. 當節點為葉節點時,判斷總合是否相符。

程式碼

對我來講,一開始遇見的瓶頸在於怎樣處理題目給的輸入,但只要想通了就很容易,每一個節點都從左括號開始,右括號結束,抓著這一點,程式就可以開始寫了。這個題目還有一點要注意的是有可能會出現負值,所以記得要處理。

2009年5月6日 星期三

增廣見聞

厭倦自己的書櫃裡總是滿滿的電腦書籍,其它領域的知識也應該有所涉獵。所以今天和從前不一樣,從書局帶回了兩本非資訊的書,分別是圖解金融以及文法女王:無痛升級學習法。文法女王的目的主要就是試圖喚醒自己遺忘已久的英文文法,而圖解金融是想多瞭解金融市場的基本知識,不然每次都看不懂財經新聞在報導什麼。

另外,意外發現一個不錯的網站(aNobii),功能如同是個人線上書櫃,可以收藏、整理、分享、交友與買賣,是免費的且也有中文介面,有興趣的可以去試試看!

2009年5月4日 星期一

UVa 111 - History Grading

UVa 111 - History Grading題目不難,可以用LCS(Longest Common Subsequence)來解。唯一要注意的是題目所給的輸入資料。

程式碼


例如:
10
3 1 2 4 9 5 10 6 8 7
2 10 1 3 8 4 9 5 7 6

第一數字表示有十個事件。
接下來的每一行裡的數字則是指每一個事件在第幾個順序發生的:
event 1 -> order 3
event 2 -> order 1
event 3 -> order 2
以此類推,所以要先經過轉換後,事件的正確發生順序為2 3 1 4 6 8 10 9 5 7
下一行經過轉換後,順序為3 1 4 6 8 10 9 5 7 2
由LCS計算可得到最大的共同子序列長度為9