上禮拜六是我上大學最後一次的程設賽
由於阿業提早畢業,阿維不想參賽,因此今年我跟阿良與王品組隊
去年有九組報名,今年卻只剩下五組,而且只有一組大四、一組大三
人數較比之下少了許多...

這次的比賽由曾媽出題
不過我猜曾媽並沒有實際寫過這些題目
因為有兩題的輸出樣本是有錯的
另外這些題目都沒有限定範圍,其實還蠻不嚴謹的
只是湯圓技師在改答案時也是用非常簡單的輸入樣本
所以還算是不用擔心

說起來今年的題目跟去年差不多簡單
相信大四隨便一位同學都可以答對的
唯一的差別是今天把輸出答案的方式從螢幕輸出改成從檔案輸出
因為往年都是直接從螢幕輸出,所以我差一點被騙
幸好阿良與王品最後有提醒我

以下是今年的題目

1.輸入兩個正整數m、n,從檔案輸出所有小於m且為數總和為n的數
input:
100 5
output:
5
14
23
32
41
50

小評:這題目10分鐘內可以秒殺

2.從檔案讀入兩個超長整數,若負號則負號在最前面
從檔案輸出這兩個數字的和

input:
98765432198765432100
-11234567891234567890
output:
8753064307530864210

小評:如果這題用Java寫的話兩分鐘內秒殺
BigInteger x = new BigInteger("輸入數字1");
x.add("輸入數字2");
但問題是我沒學過Java的開檔讀檔啊 囧
所以只好用C語言慢慢寫大數運算
而且這個大數運算還可能有減法
所以大數加法跟大數減法都必須做
其實我本來有做出來,但因為某些原因最後沒上傳
所以這題就錯了,真是可惜

3.有兩個成績檔,一個記錄學生的學號、姓名、平時分數、期中考分數
另一個記錄學號、期末考分數
兩筆資料都已經以學號順序由小到大存放
請以平時30% 期中30% 期末40%的比重加上學期總平均
從檔案輸出學號、姓名、平時分數、期中考分數、期末考分數、學期總平均

input:(p31.txt)
84506151 李柏慶 70 90
85506151 呂季運 72 75
86302005 陳勇先 77 80

input:(p32.txt)
84506151 83
85506151 90
86302005 49

output:(p3_out.txt)
84506151 李柏慶 70 90 81
85506151 呂季運 72 75 80
86302005 陳勇先 77 80 67
(樣本有非常多筆資料,此處只列三筆)

小評:這根本是一年級作業題目吧?
好歹也把學號搞亂一下啊,難怪這題所有人都答對

4.從檔案輸入某病患每天不同時間必須服用各式不同的藥品
以0~24小時排序輸出該病患幾點該服用什麼藥品

input:
降血糖
07, 17
降血脂
08
治療帕金森氏症
08, 12, 18
output:
07  降血糖
08  降血脂, 治療帕金森氏症
12  治療帕金森氏症
17  降血糖
18  治療帕金森氏症
(樣本有非常多筆資料,此處只列三筆)

小評:還是很簡單的題目,就只是在考怎麼切字串罷了
如果真的不會切的話,其實也可用VB啊
省麻煩的話直接宣告一個24個元素的String陣列
然後一個個將字串放進去即可

5.從鍵盤輸入兩個時間(格式為hh:mm:ss),時間前後順序不定
合法範圍為00:00:00~23:59:59
從螢幕輸出這兩個時間相差幾點幾分幾秒

input:
09:34:12
10:09:02
output:
00:34:50

小評:這題也是腦殘題目...不就單純的減法嗎?

6.寫一個程式從檔案輸入n、m,再輸入n*m的二維陣列代表迷宮
0代表可通行、1無法通行
列出從(1,1)到(n,m)的任一可能路徑
(就是從左上到右下啦)
只允許水平跟垂直方向移動
如果沒有路徑存在,顯示「沒有路徑存在」的訊息

input:
4 5
01101
00001
11010
01000
output:
1, 1
2, 1
2, 2
2, 3
3, 3
4, 3
4, 4
4, 5

這題其實很簡單,就只是普通的遞迴而已
這也是我很有怨念的一道題目(因為當時大甲沒有寫對)
不過這個題目跟大甲有些不同
1.碰到死路的話不能輸出,如(2,4) (1,4)
2.如果沒辦法走到出口,全都不能輸出
最後我是只好先把走過的資料存在陣列
若走到死路就往回扣,沒走到終點就全都不輸出
這題其實只有我們這組寫對,有難成這樣?

大學最後一次的程設賽就這樣結束了
名次由於是跟別人比較的關係我就不提了...

arrow
arrow
    全站熱搜

    蕭雲 發表在 痞客邦 留言(4) 人氣()