2010年3月23日 星期二

國際資訊奧林匹亞獎牌計算

參加國際資訊奧林匹亞(IOI)競賽者大約有一半的選手可以獲得獎牌。In_d.txt即為被評為可以獲獎的名單(第1欄為國家代碼,第2欄為選手姓名,第3欄為其成績),在此名單中,金、銀、銅牌的分配約為1:2:3。試寫一程式依得分高任分配獎牌。輸出包括四部分:
由高至低排序,並將得獎類別寫在分數旁[G(金)、S(銀)、B(銅)]( 如輸出範例1)。
獎牌分配,即獲得金、銀、銅牌的個數 (如輸出範例2)。
得獎牌最多的國家,寫出國家代碼及獎牌 (不分類別) 數 (如輸出範例3)。
所有得獎者分數之平均數、最高分、最低分及全距 (即最高分與最低分的差距)(如輸出範例4)。

輸入範例(in_d.txt):
RSA Bruce Merry 333
HUN Balazs Racz 250
UKR Oleksandr lotko 230
ROM Bogdan Dumitru 360
VIE Nguyen N. Huy 430
SUI Peter Kaufmann 266
CRO Frane Saric 268
ROM Radu A. Stefan 150
BLR Ivan Miatselski 226
AUS Peter Hawkins 225
SVK Jan Senko 210
BUL Svetlin Nakov 208

輸出範例1
VIE Nguyen N. Huy 430 G
ROM Bogdan Dumitru 360 G
RSA Bruce Merr 333 S
CRO Frane Saric 268 S
SUI Peter Kaufmann 266 S
HUN Balazs Racz 250 S
UKR Oleksandr lotko 230 B
BLR Ivan Miatselski 226 B
AUS Peter Hawkins 225 B
SVK Jan Senko 210 B
BUL Svetlin Nakov 208 B
ROM Radu A. Stefan 150 B

輸出範例2
G 2
S 4
B 6

輸出範例3
ROM 2

輸出範例4
263.00 430.00 150.00 280.00

密碼解密

在密碼學裡面有一種很簡單的加密方式,就是把原始資料的每個字元通通加上某一個整數K而得到密碼的字元(原始資料及密碼字元一定都在ASCII碼中可列印的範圍內)。例如若K=2,那麼apple經過加密後就變成crrng了;解密則是反過來做。
輸入說明:第一列為加密的K值,第二列為要解密的列數,第三列及以後就是需要解密的字串。(請參照輸入範例)
輸入範例:test7.txt
7
3
1JKJ'pz'{ol'{yhklthyr'vm'{ol'Jvu{yvs'Kh{h'Jvywvyh{pvu5
1PIT'pz'h'{yhklthyr'vm'{ol'Pu{lyuh{pvuhs'I|zpulzz'Thjopul'Jvywvyh{pvu5
1KLJ'pz'{ol'{yhklthyr'vm'{ol'Kpnp{hs'Lx|pwtlu{'Jvywvyh{pvu5
輸出說明:對每一測試資料,請輸出解密後的原始資料。(請參照輸出範例)
輸出範例:result7.txt
*CDC is the trademark of the Control Data Corporation.
*IBM is a trademark of the International Business Machine Corporation.
*DEC is the trademark of the Digital Equipment Corporation.
第 5

保齡球計分板

在世界各地,保齡球是相當受歡迎的運動項目之一,藉著球道上滾動的球,來碰倒球道
上的球瓶,勝負以擊倒球瓶之多寡的計分來判定。請你根據下面的計分規則,寫一個保齡球
計分程式,規則如下:
一、每一局共10 格,依序完成每1 格。
二、每格的分數將累計到下1 格。
三、第1 至9 格之計分:每1 格在2 球以內,將全部10 個球瓶擊倒為原則,分數計
算方式可分為:
1. 全倒(Strike):第1 球就將全部球瓶擊倒,即完成一格。分數計算分式為10 分,
再加上下2 球的擊倒瓶數。
2. 補全倒(Spare):第1 球未全倒時,再打1 球將剩餘球瓶全部擊倒。分數計算
方式為10 分,再加下1 球的擊倒瓶數。
3. 打完第 1 球後,第2 球如未將剩餘之球瓶全部擊倒,分數為第1 球加第2 球
擊倒之球瓶數。
四、第10 格計分方法:如果前2 球為全倒或補全倒,可再加打1 球,最多打3 球。
五、計分劃記的符號代表意義如下:
1. 全倒以記號『X』來代表。
2. 補全倒以記號『/』來代表。
3. 數字代表擊倒的球數。
4. 擊倒球數為 0 時以『-』來代表。

舉例來說:
每格擊球 7- 8/ X 8- X X X X X 8/9
分數 7 27 45 53 83 113 143 171 191 210
輸入說明:
第一行的數字,表示有幾個計分板要計分,第二行開始的每一行,為一個獨立的計分板。
每一行包含10 格擊球結果。每格以一個空白作為區隔。
輸出說明:
對輸入的每個計分板,分別計算出後的總分數。
輸入範例:
2
7- 8/ X 8- X X X X X 8/9
X X X X X X X X X XXX
輸出範例:
210
300

進位判斷(已做過)

加法的運算是把2 個整數靠右對齊,然後由右至左,一位一位相加。如果相加的結果大
於等於10 就有進位(carry)發生。請寫個程式來判斷兩個正整數相加時,產生了幾次進位的
情況。
輸入說明:
第一行的數字,表示有幾組測試資料,第二行開始的每一行即為一筆測試資料。每一行
輸入的資料有兩個正整數,以一個空格分開,每個整數的長度均小於100 位數。
輸出說明:
對每一筆測試資料,輸出相加後有幾次進位的次數。
輸入範例:
2
123 456
555 555

輸出範例:
0
3

判斷是否為11 的倍數

給一個正整數n,請寫一個程式,判斷n 是否為11 的倍數?
輸入說明:
第一行的數字,表示有幾組測試資料,第二行開始即為第一筆測試資料。每筆測試資料
為一個正整數,數字的位數,最高有可能到1000 位。
輸出說明:
對每一筆測試資料,輸出是否為 11 的倍數。是的話請輸出1,反之則輸出0。
輸入範例:
2
24841983960
121

輸出範例:
0
1

田鼠與狗

在田野中有一隻田鼠和一隻狗。狗想要吃掉田鼠,而田鼠則要儘速的逃進鼠洞中(田表面有許多鼠洞)。狗和田鼠都不是數學專家,但是也都不笨。當田鼠決定了某一個鼠洞後,就以一定的速度直線的跑去。而狗則非常擅長解讀肢體語言,當他一知道田鼠要往那個洞跑,就以田鼠2 倍的速度直線奔去,想要抓住田鼠。假如狗先到達那個洞,田鼠就會被吃掉,否則,田鼠就可安全逃走。
你必須幫田鼠選一個洞,使他可以逃離狗的魔掌(如果這樣的洞存在的話)。

輸入規範

輸入檔案中包含好幾組測試資料,每組測試資料的第一列有一個整數n 和4 個浮點數x1,y1,x2,y2。n(n £ 1000)代表本組測試資料有多少個鼠洞,4 個浮點數(均介於-10000 及+10000之間)代表田鼠(x1,y1)及狗(x2,y2)的x-y 座標。接下來的n 列,每列有2 個浮點數,代表每個鼠洞的座標。(所有的浮點數都到小數點後3 位測試資料組間有一空白列(請參考輸入範例)

輸出規範

每組測試資料輸出一列。如果田鼠可以逃走,請輸出"田鼠可由(x,y)的鼠洞逃走"。(x,y)是某一個洞的座標。如果田鼠無法逃走,請輸出"田鼠無法逃走"請注意:如果田鼠可以從不只一個洞逃走,請輸出在輸入中最前的洞。

輸入範例(test7.txt)
1 1.000 1.000 2.000 2.000
1.500 1.500
3 2.000 2.000 1.000 1.000
1.500 1.500
2.500 2.500
3.500 3.500
輸出範例(result7.txt)
田鼠無法逃走
田鼠可由(2.500,2.500)的鼠洞逃走

字串處理

給一個字串,請寫一個程式,計算此字串中,英文字元有幾個?
輸入說明:
輸入檔第一行表示有幾組測試資料,第二行開始的每一行即為一筆測試資料,每行最多
有1000 個字元。
輸出說明:
對每一筆測試資料,輸出字串中英文字元的個數。
輸入範例:
2
abc123def456
133adfag3428a2fwqgq2
輸出範例:
6
11

排序

給n 個數字,請把它們由大到小排序好。
輸入說明:
輸入檔含有多組測試資料,每組測試資料有兩行,第一行的數字n 為有幾個數字要排序,
第二行則有n 個整數n ≤ 1000,而每個要排序數字的範圍為[-10000, 10000]間的整數。
輸出說明:
輸出已排序好的數列,每個數字之間用一個空白隔開。
輸入範例:
5
1 2 3 4 5
5
-5 -4 -3 -2 -1
輸出範例:
5 4 3 2 1
-1 -2 -3 -4 -5

數字分解

給一個偶數n,請你將n 分解成兩個質數的和,也就是說,這兩個質數相加的和必須等
於n。
輸入說明:
第一行的數字,表示有幾組測試資料,第二行開始即為第一筆測試資料,每筆測試資料
為一個數字,數字的範圍為[4, 10000]間的偶數。
輸出說明:
對輸入的每筆測試資料,分別輸出 2 個質數,用一個空白做為區隔,請由小到大排列。
輸入範例:
2
12
100
輸出範例:
5 7
3 97

最長共同子序列

給2 個字串,請你輸出他們的最長共同子序列(longest common subsequence)的長度。
也就是說,在這兩個字串各自所有的子序列之中,內容相同而且長度最長的那個子序列。舉
例來說有兩個字串abcdgh 和aedfhr,它們的最長共同子序列為adh,長度為3。
輸入說明:
輸入檔含有多筆測試資料,每筆測試資料為二行字串,每行最多有 1000 個字元。
輸出說明:
對輸入的每筆測試資料,輸出它們最長共同子序列的長度。
輸入範例:
a1b2c3d4e
zz1yy2xx3ww4vv
abcdgh
aedfhr
輸出範例:
4
3

英文造句

請設計一個英文造句的程式,能將輸入的一些名詞,動詞(名詞及動詞的輸入順序是隨機)組成一些簡單句型。
所謂簡單句型是
主詞+及物動詞+受詞.
注意規則:
a.當主詞是He, She, Mary, John時,動詞要加s.
b.當主詞和受詞是同一類人稱代名詞時,受詞要改成反身代名詞。
I -- me -- myself
He/John -- him -- himself
She/Mary -- her -- herself
They -- them -- themselves
本題造句所需用到的主詞、動詞、受詞全部列出如下:
主詞: I、He、She、They、Mary、John
及物動詞: love、like、see、find
受詞:me、him、her、them、Mary、John
輸入規範
輸入檔案中第一列為一個正整數n,代表有n個英文造句練習。其後n列,每一列為一個英文造句練習,每一列有一個主詞、一個受詞、一個動詞(其順序是隨機),各個英文字之間以一個或多個空白分隔。注意:n 100。
輸出規範
輸出n列,每一列為一個英文造句之答案。若某個練習中,有多個造句是合於文法的,則需全部在同一列印出,且兩個英文句子之間需印出"或"這個字以示區隔。
輸入範例(test7.txt)
5
I her love
I love her
Mary love John
them see I
love I me
輸出範例(result7.txt)
I love her.
I love her.
Mary loves John. 或 John loves Mary.
I see them.
I love myself.

數字刪除

給n 個數字,請你在這n 個數字中,找出所有重覆出現的數字,並把它刪除。最後計算
刪除後剩餘的數字個數。
輸入說明:
第一行的數字,表示有幾組測試資料,第二行開始即為第一筆測試資料,每行不會超過
100 個數字,每個數字之間用一個空白做為區隔,數字的範圍為[0, 10000]間的整數。
輸出說明:
對輸入的每筆測試資料,分別輸出刪除完後剩下的數字個數。
輸入範例:
2
1 2 3 4 5 6 7 8 9 2 1
2 4 6 8 10
輸出範例:
7
5

密碼分析

密碼分析(cryptanalysis)是指把某個人寫的密文加以分解。這個程序通常會對密文訊息做統計分析。你的任務就是寫一個程式來對密文作簡單的分析。
輸入規範
輸入檔案的第一列有一個正整數n,代表以下有多少列需要分析的密文。接下來的n列,每列含有0或多個字元(可能包含空白字元)
輸出規範
每列包含一個大寫字元(A~Z)和一個正整數。這個正整數代表該字元在輸入檔案中出現的次數。輸入中大小寫(例如:A及a)視為相同的字元。輸出時請按照字元出現的次數由大到小排列,如果有2個以上的字元出現次數相同的話,則按照字元的大小(例如:A在H之前)由小到大排列。
請注意:如果某一字元未出現在輸入檔案中,那它也不應出現在輸出檔案中。
輸入範例(test5.txt)
3
This is a test.
Count me 1 2 3 4 5.
Wow!!!! Is this question easy?
輸出範例(result5.txt)
S 7
T 6
I 5
E 4
O 3
A 2
H 2
N 2
U 2
W 2
C 1
M 1
Q 1
Y 1

數學遊戲

在英國有一個數學遊戲,給參賽者一些正整數和一個目標數,參賽者必須在這些正整數間插入+、-、*或 / 的符號,使得最後計算的結果等於目標數。計算的方式是由左到右,而且不必管運算的優先順序(就是不管先乘除後加減那一套)。
在這個數學運算式中,有三個限制:
1. 正整數出現的次序不可改變,也就是說要與輸入的順序相同。
2. 因為目標數也是一個正整數,所以在運算的過程中,你只有在可以整除的情況下,才可以使用除法。
3. 在運算的過程中,如果你用某一個運算符號,會導致產生的數超出-32000 ~ +32000的範圍,那麼你不可以採用此運算符號(也就是說,在運算的過程中都不允許有超出範圍的數出現)。
輸入規範
輸入檔案的第一列是1個整數n,代表接下來有多少組測試資料。
每組測試資料一列。每列的第一個整數 p(0 < p 100),代表要做運算的數有多少個。接下來有p個正整數,每列的最後一個數(即p+1個)為目標數。所有的數都小於32000,而每個數字間以一個空格分開(請參考輸入範例)。
輸出規範
每列測試資料輸出一列運算式,使得輸入的p個正整數運算的結果等於目標數。如果找不到這樣的運算式,請輸出"無解"。如果有多組運算式可以達成任務,請輸出任何一組均可。請參考輸出範例。
輸入範例(test4.txt)
3
3 5 7 4 3
2 1 1 2000
5 12 2 5 1 2 4
輸出範例(result4.txt)
5+7/4=3
無解
12-2/5*1*2=4

解密

有一訊息如下"The final contest for getting right"
經放置於8*10的陣列中為
The*fina
l*contes
t*for*ge
tting*ri
ght*****
此列之後的資料皆為空白
加密後的資料為"Tlttgh**thecfit*oon*fnrg*it***negr*asei*"
寫一程式可以將加密過的訊息解密(訊息長度不超過80個字元)

計算平均值

給你一組數字,請寫一個程式計算出這組數字的平均值,四捨五入至小數第2 位。
輸入說明:
第一行的數字,代表有幾個問題要求解。第二行開始的每一行,為一個獨立的問題。每
一行的第一個整數為這個問題所屬數字的數目n,其範圍為[2, 100]間的整數。接下來的n 個
整數,分別代表這n 個數字的數值,數值範圍為[1, 100]間的整數。
輸出說明:
對輸入的每個問題,分別以一行輸出平均數,輸出的格式請四捨五入至小數第二位。
輸入範例:
2
5 2 4 6 8 10
3 52 30 61
輸出範例:
6.00
47.67

過橋問題

有n個人想要在晚上過橋,橋上每次最多只能容許兩個人行走。由於全部只有一支手電筒,所以每次兩個人拿著手電筒過橋後,必須有一人再把手電筒拿回來,這樣後面的人才能繼續過橋。
每個人走路的速度不同,過橋所需的時間也因此不同。而每次過橋的那兩個人,其花費的時間以較慢的那個人計算(走的快的當然要等走的慢的,因為只有一支手電筒)。你的任務是寫一個程式,安排這n個人過橋,並使得總共花費的時間最少。
輸入規範
輸入檔案的第一列有一個正整數,代表以下有多少組測試資料。每組測試資料的第一列有1個整數n,代表要過橋的人數(最多不會超過1000人)。接下來的n列,每列有1個整數,代表這n個人過橋所需的時間(秒),這些時間均不會超過100秒。
輸入的第一列與第一組測試資料之間,以及各組測試資料之間均有一空白列(請參考輸入範例)。
輸出規範
每組測試資料輸出的第一列為一個整數,代表這組中n個人過橋所需的最少時間。接下來的列為達到此最少時間的過橋方式。每列有1個或2個整數代表過橋的人(每個人以其過橋所需的時間代表。雖然可能有2人過橋時間相同,但那並不會影響結果)。請注意,過橋的順序是去、回交替的,因為需有一人把手電筒帶回。以第一組輸出為例說明:最少需17秒才能讓這4個人過橋。方式為:1秒、2秒的人先過橋,1秒的回來,5秒、10秒的過橋,2秒的回來,最後1秒、2秒的過橋,所以總共的時間為:2+1+10+2+2=17。
如果有不止一種方式可以達到最少時間,輸出任何一種均可。輸出資料的組間亦請空一列。
輸入範例(test2.txt)
2

4
1
2
5
10

4
1
98
99
100
輸出範例(result2.txt)
17
1 2
1
5 10
2
1 2

299
1 100
1
1 99
1
1 98

圍成正方形

這是個有趣的題目,給你已知長度的n 根棍子,請你試著寫一個程式,把這n 根棍子連

成一個正方形。連接的限制條件如下:

一、棍子只可以用端點來連接

二、不能折斷它

三、每一根棍子都必須使用到

輸入說明:

第一行的數字,代表有幾個問題要求解。第二行開始的每一行,為一個獨立的問題。每

一行的第一個整數為棍子數目n,其範圍為[4, 20] 的整數。接下來的n 個整數,分別代表這

n 根棍子的長度。每根棍子的長度範圍為[1, 100]間的整數。

輸出說明:

對每一個問題以一行輸出,如果所給定的棍子可以連成一個正方形,則輸出1。否則輸

出0。

輸入範例:

2

5 1 3 3 4 5

8 2 5 6 7 1 4 4 3

輸出範例:
0
1

基數排序

將一組資料由小而大或由大而小排序式是資料處理中很重要的工作。有一種排序方法稱為基數排序,它的做法是先排數值的個位數,接著排十位數、百位數,千位數、、、。寫一個程式輸入n 筆的數值,並輸出其排序過程。

輸入說明:第一列為數值個數n,(n介於2~10)。
第二列至第n+1列為各數值。(每個數值最多為三位數)
輸入範例:假定有5筆數值分別為:858、792、459、574、762。實際輸入之檔案內容如下:
實際輸入:(test7.txt)
5
858
792
459
574
762

輸出說明:第一列為未排序前的數值次序。
第二列起為各階段排序的數值次序。

輸出範例:上例中5筆數值的各階段排序的數值次序如下:
未排序前:
858、792、459、574、762
第一次依個位數排序結果:
792、762、574、858、459
第二次依十位數排序結果:
858、459、762、574、792
第三次依佰位數排序結果:
459、574、762、792、858

實際輸出:(result7.txt)
858、792、459、574、762
792、762、574、858、459
858、459、762、574、792
459、574、762、792、858

最小離差

n個同學(n為偶數),兩人一組,共分成 n/2組。令n/2個同學之體重總和為{S1,S2,……Sn}m為體重總和之平均值m=[(S1,S2,……Sn  )/n],分組的原則為必須使得m|之差距總合為最小。(輸出結果的差距若非為最小,則本題算錯,零分計算。)寫一程式完成此分組工作。

輸入說明:第一列為學生人數n(4n20)
第二列到第n+1列為學生的體重。(30學生的體重150)
輸入範例:假定有10個同學,其體重分別為:82537484454657674347。實際輸入之檔案內容如下:
實際輸入:(test4.txt)
10
               82
               53
               74
               84
               45
               46
               57
               67
               43
               47

輸出說明:列印出每組同學之體重總和及個別體重,且必須依體重總和由大而小印出。
輸出範例:上例中的10個同學體重分別為:82537484454657674347。其各組體重總和及個別體重的實際輸出之檔案內容如下:
     實際輸出:(result4.txt)
127 = 43 + 84
127 = 45 + 82
120 = 46 + 74
114 = 47 + 67
 110 = 53 + 57

緣份問題 (Matching)

胡孝啟與女友方月花學了一個計算兩人緣份的方法,就是將兩人姓名中每個字的筆劃穿插排成一排,男生的名字先放,也就是若男生名字以男1 男2 男3三個字表示,女生名字以女1 女2 女3表示,則放筆劃的順序為男1女1男2女2男3女3(如下圖最上面一層之數字,胡孝啟三個字比劃分別為9,7,11,方月華為4,4,8,則先將這六個數排成 9474118)。然後兩個兩個相鄰數字相加後取個位數,形成第二層,這樣一層一層累加到最後剩下兩位數字即停,此兩位數就是他倆的緣份評分。例如:下圖第二層為9+4=13取個位數3, 4+7=11取1, 7+4=11取1, 4+1=5, 1+1=2, 1+8=9,算完後形成311529。以此類推,他倆的緣份計算方法就如下圖,最後得到52分。






請你設計一程式,讓佳偶只要輸入姓名筆劃之排列(如9474118),電腦就能自動計算出他倆的緣份分數。


輸入檔格式 (c:\match\input.txt)
檔案中第一行為測試對數,第二行為第一對男女比劃之排列,第三行為第二對男女比劃之排列,以此類推。


輸出檔格式 (c:\match\output.txt)
請由檔案輸出各對配對分數,每對以一行顯示。


輸入範例:
3
9474118
4112010139
101411579
輸出範例:
52
96
04

測謊機

小明請小華猜出他心理想的一個數字,這個數字為[1, 100]間的整數。猜測的規則為:每一回華猜測一個數字,小明則回應小華猜的太高(too high),太低(too low),或是猜中(right on),猜中後立即結束遊戲。因為過程中小明可能會說謊,你必須寫一個程式,在每次結束之後,驗証明他的回應是否都正確。

輸入說明:
輸入中含有多次遊戲的記錄。在每一次遊戲中會包含許多次的猜測及回應的過程。每一次遊戲的最後都必須猜中才能結束。在最後一組遊戲後,由僅含有0 的一列代表輸入結束。

輸出說明:
針對每一次的遊戲,程式以一行輸出小明是否有說謊。如果這次遊戲有說謊則輸出0,
沒有說謊則輸出1。

輸入範例:
5
too high
3
too high
1
too low
2
right on
33
too low
34
too high
32
right on
0

輸出範例:
1
0

購買花朵


鬱金香一朵50元、香水百合一朵10元、白玫瑰一朵5元、滿天星一朵1元,現王先生有一筆金額N (0<100),請設計一程式,計算出此金額若全部用完,能買到的花朵數。(買到的花朵數必須為最少,花朵數若非最少,則本題算錯,零分計算。)

輸入說明:輸入金額n
輸入範例:假定先生有 78元。實際輸入之檔案內容如下:
實際輸入:(test2.txt)
78

輸出說明:第一列為花朵總數。第二列到第五列分別為鬱金香、香水百合、白玫瑰、滿天星的花朵數。
輸出範例:上例中先生有 78元,能買到最少的花朵數分別為鬱金香1朵、香水百合2朵白、玫瑰1朵、滿天星3朵。實際輸出之檔案內容如下:
實際輸出:(result2.txt)
                7
                1
                2
                1
                3

求係數


`(x+1)^2n之各項係數(限制條件為1 £ n £ 50n為一個正整數)。
範例:
輸入:2
輸出:1, 2, 1
輸入:3
輸出:1, 3, 3, 1
輸入:4
輸出:1, 4, 6, 4, 1
輸入:5
              輸出:1, 5, 10, 10, 5, 1

形狀問題 (shape)

某販賣積木玩具公司為了慶祝十週年紀念,於度假村舉行慶祝酒會,並於會場不同地點的正方形水泥地上,利用填滿聖誕紅花盆的方式,佈置出不同的幾何形狀。有一個盲人,很想知道某個地點佈置的形狀,請你幫他做成點字板,並將結果顯示出來,其中有花盆的地方用"*"代表,水泥地則用"0"代表。請寫一個程式,判斷點字板上所表示的花盆組成形狀為何。
條件限制
點字板邊長N最少為2最多為30。
形狀一定為凸多邊形,且最多為十邊形。

輸入檔格式 (c:\shape\input.txt)
第一行為一正整數N,表示一個NN的資料矩陣;接下來的N行顯示地面上的狀況,"0"表示水泥地,"*"表示有花盆的地方,每個檔案,只有一個相連整體的形狀。

輸出檔格式 (c:\shape\output.txt)
請列出此佈置地點的形狀名稱,例如:三邊形、四邊形、五邊形…等等。

輸入範例
8
00000000
00*00000
0****000
*******0
00****00
00000000
00000000
00000000

輸出範例
五邊形

計算位元為1 的個數

計算機概論是一門令人又愛又恨的科目,它的內容可謂包羅萬象。遇到考試時,事前需要花很多時間準備,才能拿到高分。在學習的內容中,有個章節是數字系統轉換,內容是將一個十進位的數字,轉換成二進位的數字。現在請你設計一個程式,計算由十進位數字轉換的二進位數字中,位元等於1 的個數。
輸入說明
第一行的數字,代表有幾個十進位的數字。第二行開始的每一行,為一個十進位數字,
其範圍為[0, 2147483647]的整數。

輸出說明:
對輸入的十進位數字,以一行分別輸出轉換成二位進數字中,位元等於1 的個數。

輸入範例:
2
1027
65535

輸出範例:
3
16

編碼加密

說明: 為確保傳輸資料的安全,常將資料編碼加密後傳輸。以偏移與置換二種方式編碼,
本題採偏移與置換編碼規則如下:(每次編碼加密以一個句子或一個單字為主。位移
值為N,傳輸資料只有大寫A-Z 共26 個英文字母與”*”表示空白,”**”表示開始
碼,”***” 表示結束碼,每次編碼需要有開始碼與結束碼。)
1. 偏移量:以 A、B、C、D、E、F……X、Y、Z、A、B…..循環方式,A 偏移量2
則為C,A 偏移量3 則為D,Y 偏移量2 則為A。如BOOK(明碼)經偏移量值4 處
理後為FSSO。偏移量為編碼句子(單字)的字母數除以10 之餘數。如編碼句子(單
字)為BOOK 有4 個字母則偏移量是4,編碼句子(單字)為THIS IS A BOOK 有11
個字母則偏移量是1。
2. 加密編碼步驟如下:
2-1.編碼1:轉換成”偏移編碼值”, 如下表1,A 為65。則FSSO 為70838379。
2-2.編碼2:阿拉伯數字轉成小寫英文字,a 為0,b 為1,餘如下表2。如70838379
為 haididhj 為 BOOK 偏移量4 的加密編碼結果。
3. 編碼字母數:此次編碼偏移量。編碼最後加入所編碼的字母個數,並加上#。如編
碼句子(單字)BOOK 有4 個字母,依下表2 則為#e。
表 1 偏移編碼值
A B C D E F G H I J K L M
65 66 67 68 69 70 71 72 73 74 75 76 77
N O P Q R S T U V W X Y Z
78 79 80 81 82 83 84 85 86 87 88 89 90
表 2 阿拉伯數字0-9 對應表
0 1 2 3 4 5 6 7 8 9
a b c d e f g h i j
輸入格式:明碼文字(大寫英文字母)。
輸出格式:加密編碼結果。
輸入範例 1:BOOK
輸出範例1:**haididhj#e***
輸入範例 2: BOOKS
輸出範例2:
**hbieieiaii#f***
輸入範例 3: THIS IS A BOOK
輸出範例3:
**ifhdheie*heie*gg*ghiaiahg#bb***

用正方體填滿

在進入社會找工作時,通常會經過面試的過程,來決定是否要錄用這個人。假設今天你
去一家程式設計公司面試,面試的主考官出了一道題目。請你設計一個程式來解決下面的問

題:

給你一個長方體,請問最少要用幾個大小相同的正方體,才能把這個長方體填滿,你可

以使用的正方體大小不限,長方體及正方體的邊長必須均為正整數。

輸入說明:

第一行的數字,代表有幾個長方體。第二行開始的每一行,記錄了每個長方體長寬高的

邊長,邊長的範圍為[1, 1000]間的整數。

輸出說明:

對輸入的每個長方體,分別以一行輸出所使用正方體的個數。

輸入範例:

2

4 6 8

3 5 7

輸出範例:

24

105

最大連續元素和(未解)

給一串數列,有n 個整數,請寫一個程式,找出這個數列中,連續元素相加的最大值。

例如:1, 2, -3, 4, 5 這一數列,最大連續元素和是4+5=9。

輸入說明:

第一行的數字,代表有幾組測試資料,第二行開始的每一行即為一筆測試資料。每一筆

測試資料是不定個數的整數數列,以空格分開數字。數字的範圍為[-10000, 10000]間的整數。

輸出說明:

對每一筆測試資料,以一行輸出最大連續數值和。

輸入範例:

2

1 2 3 4 5

10 -5 7 6 -1 -3

輸出範例:

15

18

竊車問題 (Lostcar)

一位警察發現了一些可疑的機車,為了查明這些可疑的機車是否為失竊機車,他需將這些機車的車號與警政署的失竊機車檔案比對。請寫一程式來幫助這位警察找出哪些是失竊的機車。

條件限制
警察發現的可疑機車不超過20輛。
警政署的失竊機車檔案中最多為100輛機車資料。

輸入檔格式 (c:\lostcar\input.txt)
第一行有兩個整數n和m,中間以一個空白分開。n為發現的可疑機車數目,m為失竊機車檔案中機車的數目。接下來的n行,每行有一可疑機車的車號,車號以六個字元表示。再接下來的m行,則為失竊機車資料,每行有三項資料,各項資料間以一個空白隔開;第一項資料(欄位1~6)為機車車號,第二項(欄位8~13)為該車外觀顏色,第三項(欄位15~20)為該車車主姓名。

輸出檔格式 (c:\lostcar\output.txt)
請依車主姓名的順序(英文字母由A~Z)依序印出找到的失竊機車資料。若無法找到任何失竊機車請印出 “Cannot find!”。

輸入範例
4 6
PIG222
WIN555
SAD321
JOY866
DOG999 RED CHANG
JOY355 BLUE LEE
SAD321 YELLOW WANG
FOX555 WHITE WU
WIN555 BROWN HO
PIG222 BLACK LIN

輸出範例
WIN555 BROWN HO
PIG222 BLACK LIN
SAD321 YELLOW WANG

找出文章中使用的英文單字字數

現在網際網路盛行,網路使用者可以利用搜尋引擎找出特定的網路資訊。在搜尋技術中,

關鍵字搜尋是最常見的方法。建立關鍵字有很多種不同的方法,其中一種方法是找出使用的

單字來當作關鍵字。本題就是要請你寫一個程式,可以在一段英文文章中,找出使用的英文

單字字數。

輸入說明:

第一行是要建立關鍵字的英文文章篇數,第二行開始為英文文章的內容。每篇文章之間,

以一行空白作為區隔。在建立關鍵字時,我們簡化一些文法上的規則,每個英文單字與英文

單字之間,扣除標點符號之後,以空白作為區別,稱之為一個單字,大小寫視為相同。使用

到的標點符號則包括下列三個:『,』,『.』,以及『:』。

輸出說明:

對輸入的每篇文章,分別以一行輸出使用的英文字字數。

輸入範例:

2

He works hard from morning till night. He is a hard worker.

I once heard him speaking in English. He is a very good speaker of English
 
輸出範例:


10

14

求餘數

求餘數對於會寫程式的人來說,是個簡單的問題,例如用VB 來求餘數時,可以用mod這個關鍵字來實作。但如果算式為R = B^P mod M 的型態,給B、P、及M,要算出餘數R,當B 或P 很大時,那就變得不簡單了。現在,請你設計一個程式,來解決上述這個不簡單的問題。

輸入說明:

第一行的數字,表示有幾個問題要求解,第二行開始的每一行,為一個獨立的問題。每一行包含三個數字,分別為B、P、及M,例如:10 2009 9 代表B=10、P=2009、M=9。所有數字均為正整數,其範圍屬於[1,100000]。

輸出說明:

對輸入的每個問題分別以一行輸出餘數R。

輸入範例:

2

10 2009 9

2 99 5

輸出範例:
1
3

2010年3月19日 星期五

日期轉換

小明手上有一份完件,記載公司歷年來獲品進出日期資料,資料格式西元紀年來記載,但是因為業務需要必須轉換成名國紀年

輸出範例

西元1902年5月20日
西元1911年10月4日

輸出

民國前九年五月二十日
民國元年十月四日

足球比賽場次

說明:足球比賽採初、複賽,初賽時將參賽隊伍分成2組(N/2)採單循環(必須與同組各隊比1次)取前一半隊伍進入複賽(N/4),每複賽為單淘汰(勝隊晉級),比賽將頒發前3名。計算所需對賽之場次數目,如N = 16 ,初賽分2組各8對單循環淘汰賽,每組28場計56場,得8隊晉級複賽。8對單淘汰4場4隊晉級,4對單淘汰2場得勝2隊晉級冠軍賽1場,輸的2隊爭季軍賽1場。 合計 56 +4 +2 +1 +1 = 64 場


輸入:16之倍數
輸出:正整數(舉辦之場次數目)

輸入範例:16
輸出範例:64

盤子問題

張三把所有的1000個盤子分別裝在10個箱子裡,每個箱子分別裝進1、2、4、8、
16、32、64、128、256、及489個盤子。張三將這些箱子依序標上(1)~(10)10個號
碼。有天,李四想找張三借n個盤子(n為程式使用者輸入的資料,代表李四欲借盤
子的數目,其限制範圍為1<=n<=1000,n為正整數)。張三知道每個箱子的編號與
箱子內所放盤子的個數,但如何設計一個程式,在不拆開箱子重新組合盤子的情
況下,告訴張三應組合拿出那些箱子給李四,才能得到李四要借的盤子數目呢?

範例:

輸入:
717



輸出:
(10)489
(8)128
(7)64
(6)32
(3)4

數列搜尋

有一數列0、1、3、8、21、......,輸入某一順序職,輸出該順序值得實際值,若順序為0代表結束。
輸入範例:
2
4
6
0
輸出範例:
1
8
55

2010年3月15日 星期一

2010/3/15包含四點的最小圓

題目:求包含四點的最小圓。
1.由in.txt 文字檔中讀入四點坐標。
2.將四點坐標畫在表單中。
3.求包含這四點的最小圓,將它畫出來。
4.將求得的圓心及半徑,輸出到out.txt中。

2010年3月5日 星期五

2010/03/08 子集合

輸入一變數N,再輸入N 個數字成為一個含有N 個數的集合A,


然後輸出所有這個A 集合的子集合。

Ex: N=3, A { 1, 2, 3 }

ANS: { } <--- 空集合

{ 1 },{ 2 },{ 3 }

{ 1, 2 },{ 1, 3 },{ 2, 3 }

{ 1, 2, 3 }

2010/03/03 羅馬數字

設計一程式可將最長含10個字元的字串讀入, 每一個字元均代表某一數值的羅馬數表示法。將讀入之羅馬數及其相對應之阿拉伯數一起列印出來。
【壹】 羅馬數和字元之對應表如下:

M 1000

D 500

C 100

L 50

X 10

V 5

I 1
你的輸入有下列幾組:

(1) VII

(2) LXXXVII

(3) CCXIX

(4) MCCCLIV

(5) MMDCLXXIII

(6) MCDLXXVI

2010/03/04 路徑問題 (path)

問 題敘述
在一個古老的舊城市裡,所有的道路皆是單行道。但 因其道路缺乏規劃,故某些單行道所連接之路口可能完全相同且方向一樣。甚至於有單行道其起始路口與終點路口是同一個路口。為了發展該城市之觀光事業,該市 交通局決定重新規劃所有道路。但首要任務則必須先了解各路口之間可以通行之路徑數。請寫一個程式計算任意兩個路口之間有多少種不同的路徑。一個路徑是由一 個()以上不重複之單行道所組成(單行道、起始路 口、終點路口皆不可重複,但其餘路口可以重複)
條件限制
  1. 路口數
  2. n最少為1最多為50,且路口編號由1n
  3. 單行道數量
  4. m最少為1最多為2500
輸入檔格式 (c:\path\input.txt)
第一行有兩個整數n m,以一個空白分開。接下來的m行 各有兩個整數,分別代表各單行道之起始及終點路口。
輸出檔格式 (c:\path\output.txt)
請以一個 n x n (n n)的矩陣,列出 從路口i至路口j之路徑數,1<= i, j <= n。每一列i均應有n個整數,分別代表路口i至所有其它路口之路徑數。在同一列的數字請以一空白隔開。
輸入範例
5 6
1 1
1 2
2 3
4 3
5 4
5 4
輸出範例
1 2 2 0 0
0 0 1 0 0
0 0 0 0 0
0 0 1 0 0
0 0 2 2 0

2010/03/05 消除字串

試寫一程式,以輸入一字串,其長度 (含空白), 最長為81個字元,然後檢驗該語言串中之母音 (A,E,I,O,U,a,e,i,o,u),並將之刪除,且該 些母音之位置由後續之字元向前位移予以佔用而不留下空白,例:輸入
"Mary^Lives^IN^300,^Born^St.,^Chungli,^Taiwan,^R.^O.^C." 其中"^" 表示空一個位置。
經刪除母音後成為 "Mry^Lvs^N^300,^Brn^St.,^Chngl,^Twn,^R.^.^C." ;然後將輸入之字串與刪除母音後之字串同時列印於報表。



測試資料:(請將下列文章存於檔案中,以讀檔案的方式來設計程式)

" He Sells Sea Shells by the Seashore."

" I don't know how to Complete the testing Program."

" The men who spead ill of others will take no

advantage of others in the last."

2010/03/02 蝸牛爬竿問題(snail)

問題敘述

蝸牛沿著竹竿底部往上爬,繳幾天可以爬到竹竿頂端呢?先看看以下的範例:
一隻蝸牛從6 公尺長的竹竿底部往上爬,已知這隻蝸牛從太陽出來到太岔下山可以往上爬3 公尺,太陽下山後到隔天太陽昇起前是蝸牛的休息時間,在這段休息時間內蝸牛會下滑1 公尺。而且,蝸牛的疲勞系為10 (%),這表示從第二天開始,蝸牛每天都會少爬3 * 10 % = 0.3 公尺。請問蝸牛在第幾天以爬到竹竿頂端呢?
從下表可以看出這隻蝸牛在第三天可以爬到竹竿的頂端。天數起始高度可爬行距離累積高度下滑後高度

1 0.0 3.0 3.0 2.0
2 2.0 2.7 4.7 3.7
3 3.7 2.4 6.1

你的任務是找出蝸牛爬竿的通解,根據下列條件限制算出蝸牛在第幾天時可以順利爬到竹竿頂端或是失敗?

條件限制
1. 竹竿的高度介於6 ~ 100 公尺之間。
2. 第一天可以往上爬行的距離介於0 ~ 100 公尺之間。
3. 休息時下滑距離介於0 ~ 99 公尺之間。
4. 疲勞系數介於0 ~ 99 (%) 之間。
5. 爬行過程㆗如果下滑觸地 (高度<= 0),則判定為失數(Fail)。

輸入檔格式
輸入檔可以是一個或是多個狀況,每行代表一個狀況。每行包含四個正整數 H、U、D 和F 各以一個空白隔開;當H = 0 時代表輸入檔的結束,否則H 代表竹竿的高度,U 代表第一天蝸牛可以爬行的距離,D 代表蝸牛休息時下滑的距離,F 代表疲勞係數。

輸出檔格式
對於每一個測試狀況,輸出檔都要輸出一行判斷蝸牛成功(success)或是失敗(fail),以及這是發生在第幾天,格式如輸出範例。

輸入範例
6 3 1 10
10 2 1 50
12 6 3 10
0 0 0 0

輸出範例
success on day 3
fail on day 3
success on day 5

2010年3月1日 星期一

2010/03/01大數運算

在大多數的程式語言中,一個整數通常只有32位元,就算是使
用無號的整數,仍然最大只能表示232-1。若要表示一個大於232-1的
整數該怎麼辦呢?答案就是採用大數。本題要求寫出一個大數運算的
程式,可以對二個50位數以內的10進制非負整數作乘法或除法的運
算。除法運算時,毋須考慮除數為0的情形,並僅需算出商數。

輸入說明 :
第一行輸入一個字串,表示被乘數或被除數,其為一個50位數
以內的10進制非負整數。

第二行輸入運算符號 * 或 /,分別表示乘法或除法運算。

第三行輸入一個字串,表示乘數或除數,其為一個50位數以內

的10進制非負整數。當執行除法運算時,除數為正整數。

輸出說明 :
印出運算結果。

範例輸入 :
若題目沒有特別說明,則應該以多測資的方式讀取,若不知如何讀取請參考 a001 的範例程式。
12346587987654321
*
98765432123456789

12345678901234567890
/
1234567890

範例輸出 :
1219416097850959788293446112635269

10000000001