2011年8月31日 星期三

資料表示方式的應用(99模擬) -2

子題2(12%):在圖形結構中,有一種特別的圖形,稱之為「樹狀圖」(Tree)。在一個樹狀
圖中,包含若干個「節點」,每個節點和它的「上一層節點」及「下一層節點」相連。每個節
點有「1 個」或是「沒有」上一層節點;也可能有「1 個」、「多個」或是「沒有」下一層節點。
這些節點中,只有1 個節點沒有上一層節點,所以它是最頂層的節點,我們稱之為「樹根」;
其他「非樹根」的節點,都有1 個上一層節點,我們稱這些「上一層節點」是該節點的「父
親」。現在給定一個樹狀圖資料,並給一個「目的地」節點名稱,請選手輸出從「樹根」連接
到目的地經過的所有節點。輸出資料的順序,應從「樹根」開始,一層一層向下,最後到達
「目的地」節點依序輸出,輸出的節點不能重覆。

輸入說明:第1 行表示共有多少個節點;第2 行是目的地節點;第3 行起是所有節點資料,
每行有一組符號以逗號隔開,第1 個符號為「節點名稱」,第2 個符號為其「父親名稱」。若
是「樹根」節點,其父親表示為「---」3 個連續減號。

輸出說明:列出從「樹根」連接到目的地經過的所有節點(包括樹根與目的地節點),而輸出
的節點間至少以1 個空白相隔開。
輸入範例:【檔名:in-2-2.txt】
11
K
A,---
B,A
C,A
D,B
E,B
F,C
G,E
H,G
I,G
J,I
K,I
輸出範例:【檔名:out-2-2.txt】
A B E G I K

2011年8月28日 星期日

資料表示方式的應用(99模擬) -1

子題1(12%):在一張地圖上標示有若干個城市,及一些可雙向通行的道路。這些道路的頭、
尾,各連接一個不同的城市。我們用1 個一維整數陣列(假設稱為a 陣列),存放各個城市連
接的道路數目(存放順序不限)。為了判斷陣列中存放的道路數目值,是否可以正確的表達某
一張地圖上城市及道路的關係,我們利用以下步驟檢查(假設陣列的指標由1 開始):
步驟1:我們將陣列由大到小排序,令排序後的陣列為b 陣列。
步驟2:假設b(1) = k,我們將b(2)到b(k +1)共k 個元素,每個元素值都減1。
步驟3:我們將b(1)從b 陣列中移除,得一個「新陣列」。
第 3 頁,共 8 頁
步驟4:如果「新陣列」中,存在任何一個小於0 的元素值,原始a 陣列就是「不正確」陣列;
如果「新陣列」中的所有元素均等於0,原始a 陣列就是「正確」陣列。若在此步驟
達成判斷,檢查即可結束。
步驟5:在不能判斷正確與否時,將「新陣列」代入步驟1,重覆上述檢查,直到達成判斷條
件為止。
輸入說明:
第1~4 行表示將判斷之4 組陣列值,各元素間以逗號區隔,每組陣列最多有10 個元素。輸入
檔之元素值,不會造成選手進行「步驟2」時產生「陣列索引值超出範圍」的錯誤。
輸出說明:
第1~4 行分別輸出第1~4 組陣列的正確與否。當正確輸出「正確」,不正確時輸出「不正確」。

輸入範例:【檔名:in-2-1.txt】
1,1,2,5,3,2
4,3,1,1,1
4,4,4,3,3
3,3,3,3,3

輸出範例:【檔名:out-2-1.txt】
正確
不正確
正確
不正確

2011年8月15日 星期一

傳統數學問題的解決(99模擬) -2

子題2(8%):如果有一個正整數n,其值等於所有n 的因數(除了n 以外)之總合,則n 稱
為「完美數」(Perfect number)。在此計算中,其「因數」不限制為「質因數」。請輸出2 到數
字k 之間的完美數。

輸入說明:
第1 行有1 個數字,代表k 的值。而k 的值不超過50000。

輸出說明:
每行輸出1 個範圍內的完美數,依其值由小到大輸出。

輸入範例:【檔名:in-5-2.txt】
10000
輸出範例:【檔名:out-5-2.txt】

6
28
496
8128

傳統數學問題的解決(99模擬) -1

子題1:給定若干個數字,將它們依序排成一個頭、尾相接的環形。如果我們從某一數字開
始點名,每次點名後再往後跳2 個數字繼續點名(中間間隔1 個未被點名的數字)。已經被點
到名的數字不可再點,直到剩下最後一個「未點名」的數字時才停止。請問最後的數字為何?

輸入說明:
第1 行依序給定最多20 個要點名的數字,各數字之間以逗號隔開。
第2 行有1 個數字,是「開始點名」的數字。

輸出說明:
第1 行輸出最後一個未點名的數字。

輸入範例:【檔名:in-5-1.txt】
5, 3, 7, 11, 4, 2, 1, 8, 9
8

輸出範例:【檔名:out-5-1.txt】
9

2011年8月12日 星期五

文章的字母統計及單字的分離(99模擬) -2

子題2(9%):請列出文章中使用那些「A」或「a」開頭的單字?

輸入說明:
第1 行表示文章的行數(行數至多10 行,每行最多120 個字),第2 行開始為文章的內容。

輸出說明:
依單字在文章中出現之順序,輸出開頭為「A」或「a」的單字。輸出的單字大小寫需保持與
原文章相同,而每行只輸出1 個單字。若同一單字多次出現在文章中,只有該單字在文章中
首次出現時才被輸出,第2 次或以後出現時均不再輸出。

輸入範例:【檔名:in-1-2.txt】
4
Just ask a Chinese fruit farmer who now has to pay people to pollinate apple trees because there are no
longer enough bees to do the job. And it's not just the number of bees that are rapidly dwindling. As a
direct result of human activity, species are becoming extinct at a rate 1,000 times greater than the natural
average.

輸出範例:【檔名:out-1-2.txt】
ask
a
apple
are
And
As
activity
at
average

文章的字母統計及單字的分離(99模擬) -1

Problem 1:文章的字母統計及單字的分離
選手請由輸入檔讀入一篇英文文章(文章內容包括「大、小寫英文」、「空白」及「標點符號」, 沒有任何「全型」字母或符號),並作以下的統計:
子題1(9%): 若不區別英文字母大小寫,請統計26 個英文字母A~Z在文章中出現的次數?
(只統計英文字母,其他如空白、標點符號等皆不統計。)


輸入說明:
第1 行表示文章的行數(行數至多10 行,每行最多120 個字),第2 行開始為文章的內容。

輸出說明:
第1 行分別列出字母A、B、C、D、E 及其統計次數,第2 行列出字母F、G、H、I、J 及其
統計次數,每行輸出5 個字母及統計,以此類推;但最後一行只列出字母Z 及其統計次數。
英文字母以「大寫」輸出,每個字母及其統計次數印在1 組小括號中,並由逗號分隔。

輸入範例:【檔名:in-1-1.txt】
4
Just ask a Chinese fruit farmer who now has to pay people to pollinate apple trees because there are no
longer enough bees to do the job. And it's not just the number of bees that are rapidly dwindling. As a
direct result of human activity, species are becoming extinct at a rate 1,000 times greater than the natural
average.

輸出範例:【檔名:out-1-1.txt】
(A, 27) (B, 6) (C, 7) (D, 6) (E, 38)
(F, 4) (G, 6) (H, 11) (I, 14) (J, 3)
(K, 1) (L, 9) (M, 5) (N, 16) (O, 16)
(P, 8) (Q, 0) (R, 18) (S, 15) (T, 28)
(U, 9) (V, 2) (W, 3) (X, 1) (Y, 3)
(Z, 0)

2011年8月9日 星期二

No Problem

內容 : 
最近程式競賽非常頻繁。儘管對參賽者來說這是好事,對出題者來說卻適得其反。目前出題者尚能維持一個題庫並說:「沒有問題!」但是如果繼續這樣下去不知道還能維持多久。
給你一年中每個月所出的題目數量及每個月所需要的題目數量。如果某個月需要 N 個題目,而當時的題庫數量不足,那麼該月的所有比賽均取消。請寫個程式來判斷是否有足夠的題目來辦比賽。記住,如果某個題目是在 X 月出的,該題目必須在 X+1 月或其後的月份才能使用。
輸入說明 :
每筆測資的第一行有一個整數 S (0≤S≤100),表示年初已有的庫存題目數量。第二行有 12 個以空白隔開的整數,依序表示一到十二月每個月所出的題目數量。第三行也有 12 個以空白隔開的整數,依序表示每個月比賽所需要的題目數量。這些整數會介於 0 到 20 之間 (含)。負數代表輸入的結束。
輸出說明 :
對於每筆測資,印出一行 "Case X:",X 代表測資編號。然後印出 12 行,如果 i 月 (1≤i≤12) 有足夠的題目,則在第 i 行印出"No problem! :D" (沒有問題),否則印出 "No problem. :(" (沒有題目)。
範例輸入 :
3 0 3 5 8 2 1 0 3 5 6 9 
0 0 10 2 6 4 1 0 1 1 2 2 
-1
範例輸出 :
Case 1: 
No problem! :D 
No problem! :D 
No problem. :( 
No problem! :D 
No problem! :D 
No problem! :D 
No problem! :D 
No problem! :D 
No problem! :D 
No problem! :D 
No problem! :D 
No problem! :D
提示 :
雖然這個題目最好用「陣列」來解,但是不用陣列也可以解,只是程式碼會重覆且冗長。

2011年8月8日 星期一

數字合併

黑板上有n個數字寫成一排,現在每次選擇兩個相鄰的數字,把比較小的那個 數字擦掉(如果兩個數字一樣大,那麼擦掉任何一個都可以。)然而,這些步驟需要花費,這個花費恰好等於留下來的那個數字(比較大的那個)。

請問經過n-1次操作,黑板上會剩下的那個數字是多少?

你以為問題這麼簡單嗎?錯!

真正的問題是:

請問經過n-1次操作,黑板上會剩下最大的那個數字,所有操作方法中,最小總花費是多少?
輸入說明 :
輸入檔只包含一筆測試資料。
第一列有一個正整數n(1<=n<=1,000,000)代表黑板上數字的個數。
接下來有n列,每列有一個正整數(1<=數字<=109)依序代表黑板上的每個數字。
輸出說明 :
請輸出經過n-1次操作之後,所需的最小總花費。
範例輸入 :
5
7
4
5
2
5
範例輸出 :
22

提示 :
消掉4、花費5;
消掉2、花費5;
消掉5、花費5;
消掉5、花費7;
總花費是5+5+5+7=22。

2011年8月7日 星期日

產品包裝

內容 : 
某工廠生產4種正立方體產品,邊長分別為1,2,3,4公分,該工廠的包裝箱為4*4*4公分(不計算包裝箱厚度),現在有若干筆訂單,每一筆訂購單可能包括各種產品但數量可能不同,請計算每一筆訂購最少各需要多少的包裝箱。

輸入說明 :
每行是一筆訂購單,由四個整數組成,每個整數以一個空白間格,依序分別代表邊長1,2,3,4公分的產品數量,每一個數量均為不大於20000的非負整數,以一個空白隔開。

輸出說明 :
輸出各筆訂購的最少包裝箱數目,每一筆一行。

範例輸入 :
5 4 8 2 
12 14 32 7
範例輸出 :

11 
41

2011年8月6日 星期六

棒球九宮格

內容 : 
小明很喜歡棒球。某天晚上跟媽媽到家裡附近逛夜市,突然發現多了一個棒球九宮格的遊戲攤位(如圖一)。遊戲規則如下:一開始九宮格內會分別擺上一個木板,玩家站在距離九宮格板數公尺外,總共可以丟出九顆球。被命中的格子裡的木板會倒下;若球丟出範圍外,或是剛好丟在九宮格的框架上,則所有格子都會維持原樣。一旦將球丟出去,可用的球數就減少一,直到將九顆球丟完為止。

九顆球都丟完之後,夜市的老闆會根據倒下的格子來檢查連成幾條線,以決定獎品的好壞。依照老闆的規定,只要以下其中一組格子裡的木板同時倒下,則算連成一線:{1,2,3}、{4,5,6}、{7,8,9}、{1,4,7}、{2,5,8}、{3,6,9}。舉例來說,若2、3、5、7、8、9這六個格子中的木板都倒下,則2、5、8連成一線,且7、8、9也連成一線,總共連成兩條線。(請注意,依規則3、5、7不算連成一線。)此外,老闆也會根據丟到的格子號碼,計算"加碼積分",提供額外的獎賞,詳細規則如下:丟到5號得2分,丟到{2、4、6、8}中的任一號碼得5分,丟到{1、3、7、9}中的任一號碼得8分。例如若2、5、8、9這四格被丟中,則加碼積分為20分。請注意,重複丟到的號碼只算一次分數。
請寫一個程式來模擬玩棒球九宮格的遊戲。為了方便貣見,我們將用二維座標來定義九宮格的位置,如圖二所示。每一格都是相同大小的正方形,7號格左下角的座標為(0,0),3號格右上角座標為(30,30)。在模擬的過程中,會提供每一顆球丟在九宮格上的座標位置。為了簡化問題,若某顆球丟在九宮格上的座標位於某一格內,則判斷打到該格;如果座標位於某一格的邊上,則判斷為打到框架,沒有任何格子被打到。舉例來說,假設一顆球丟到座標位置為(7,13)的地方,由於落在4號格之內,判定打到4號格;假設有另一顆球打在(10,2)(或(10,20))的座標位置,則因為落在框架上,沒有任何格子被打到。當然如果座標落在九宮格外的區域,也沒有任何格子被丟中。
輸入說明 :
輸入總共有9行。每一行有兩個整數x和y (-20 <= x,y <= 50,x與y由一個空白隔開),代表球的座標。
輸出說明 :
請輸出丟出9顆球之後,根據夜市老闆的規則總共連成幾條線;另外請根據丟到的格子號碼,算出加碼積分。
範例輸入 :
輸入範例1: 
7 13 
10 2 
5 8 
-9 19 
11 35 
3 23 
18 0 
0 18 
40 22 
輸入範例2: 
12 22 
15 11 
3 20 
3 22 
33 27 
28 28 
16 5 
22 -5 
35 35 
範例輸出 :

輸出範例1: 
1 21 
輸出範例2: 
2 28

2011年8月5日 星期五

黑暗土地

內容 : 
黑 暗大陸的野人們突然四散開來,然後一瞬間大家都停了下來,靜止不動。部落首領走了出來,告訴努曼諾爾人這些野人們的座標位置,要求努曼諾爾人選出其中三 個,而選中的那三個野人所圍出來的土地就送給努曼諾爾人。現在,請從首領提供的座標資訊回答:最大的三角形土地面積可以是多少。若三個點的座標為 (a,b), (c,d), (e,f),則這三個點圍成的三角形面積為:
| 0.5*(ad+cf+be-bc-de-af) |
輸入說明 :
有多組測試資料,以EOF結尾。
輸入的第一行是一個正整數N (3<=N<=200),表示平面上有多少野人。接下來有N行,每行兩個整數,其中第k行代表第k個野人所在的座標 (Xk,Yk)
輸出說明 :
輸出可以取得的最大三角形土地面積,請四捨五入到小數點後兩位。
範例輸入 :
0 0 
0 1 
1 0 
1 1 
1 1 
5 3 
2 9
範例輸出 :
0.50 
15.00

2011年8月4日 星期四

隔熱紙

內容 :
喵嗚建設公司最近由北到南蓋了一整排共n棟的大樓,且每棟大樓是緊緊貼在一起的
而喵嗚建設公司希望能夠帶給住戶舒適的住宅環境,因此決定在東面窗上貼滿隔熱紙
然而預算有限,不能有任何隔熱紙被浪費,又切割隔熱紙是一向充滿麻煩的工程
你可以幫喵嗚建設公司算出至少要幾張矩形的隔熱紙才能貼滿整排大樓的東側嗎?

輸入說明 :
第一行有一個正整數 n(n<=100000),代表有幾棟大樓
接下來n行每行有兩個正整數(<=1,000,000,000),依序代表每棟大樓的寬度及高度
輸出說明 :
輸出最少所需要的隔熱紙數
範例輸入 :

5
1 2
1 3
2 2
2 5
1 4
範例輸出 :

4

2011年8月2日 星期二

大朋友下樓梯

內容 : 
傳說,有個遊戲叫做大朋友下樓梯,這個遊戲有三種難度,簡單中等困難。

三種難度的差別是,簡單的難度大朋友一次只能下樓梯 1格

中等的是則是,大朋友一次可以下樓梯 1格或 2格

困難的比較具有挑戰性,大朋友一次可以下 1格、 2格或 3格


現在我們想知道,大朋友有幾種下樓梯的方法可以走到地下k樓

對了,有一個限制是,大朋友不能上樓梯只能下樓梯
輸入說明 :
給定兩個正整數 t, k , t代表遊戲難度,值為1~3 分別代表,簡單中等困難。

k則是一個負數,代表地下k樓(0>k>-20)

包含多筆測試資料。
輸出說明 :
輸出大朋友走到地下K層後的方法數。
範例輸入 : 
1 -1 
1 -2 
2 -1 
2 -2 
2 -3 
2 -4 
3 -1 
3 -2 
3 -3 
 
範例輸出 :
4

2011年8月1日 星期一

Find the Telephone

內容 : 正體->简体 
有些地方會用對應的字母來代替數字使得電話號碼更好記。如此一來 MY LOVE 就代表 69 5683。這不是萬靈丹,因為有的電話號碼並不能構成一個字或片語,而且 1 和 0 沒有對應的字母。
請讀入一個字串並依據下表轉成電話號碼。字串由大寫字母 (A-Z)、連字號(-) 和數字 1 和 0 所組成。

字母數字
ABC2
DEF3
GHI4
JKL5
MNO6
PQRS7
TUV8
WXYZ9
輸入說明 :
輸入含有若干字串。每個字串單獨在一行,有 C 個字元,1 ≤ C ≤ 30 。輸入以 EOF 作為結束。
輸出說明 :
對於每個字串,請輸出相對應的電話號碼。
範例輸入 :help
1-HOME-SWEET-HOME 
MY-MISERABLE-JOB
範例輸出 :
1-4663-79338-4663 
69-647372253-562