UVA UVA 490 解題報告

2021-05-22 13:48:12 字數 898 閱讀 3567

一.   

這道題目卡了我將近有乙個星期,昨天實在忍不住才email求助劉大大.結果是陣列越界. orz...

總體來說,這道題目不難,構造出來的模型無非就是個2維陣列,然後將第一列當做第一行輸出,第二列當做第二行輸出,以此類推.

不過這裡也有2個小細節處理: 1. 由於要控制輸出的行數,因此要在輸入時就判斷出最長的一行的字元個數.

2. 每一行最後的換行符不能直接輸出,而要換成空格.

稍微處理下這2個問題,ac這題比較簡單.

之所以這題卡了我這麼久,是我對邊界的把握不夠.

二.簡要分析下:

首先,由於題目中的條件給出:每一行不超過100個字元.於是我就把臨時陣列temp定義為100個.並且抱有僥倖心理:不會真的測試

輸入100個字元.

但是,就是這點僥倖心理導致我一直沒往這方面考慮.我們知道,當用fgets來讀一行字元的時候,它會在行尾自動加上/n.因此,當輸入100

個字元後,再加上/n就越界了.

三.思想小結:

1.對於邊界情況一定要特別留心,不要偷懶不去分析邊界或者模糊地猜測.

方法小結:

1. 對於臨時陣列的大小,要比題目條件給出的略大.

2. 在使用fgets的時候需要注意2點:

1)若前面有scanf進行輸入,要排除scanf後的換行符對fgets的影響,一般是使用getchar()或者fgetc(stdin)過濾.

2)fgets會在輸入的字串後面自動加換行符.因此一定要注意此時字串的長度問題.

(可以自己試驗:用fgets接受鍵盤輸入的abc,再用strlen去測,發現長度是4.原因是"abc/n")

四.**如下:

UVA UVA 489解題報告

這是個遊戲題,是原來上英語課時,老師喜歡出的吊死鬼的遊戲.所以遊戲規則大概也清楚.不過需要注意幾點 1.若正確答案中某個字母出現了多次,那麼只要猜中那個字母一次,就算答案中那個字母全被猜中.2.猜錯的字母如果重複,則只算錯一次.若7條命都沒了,就算失敗,全部猜中則算成功.如果沒全猜中但是還有剩餘生命...

Block Voting 解題報告

這道題做的有點狼狽,效率不高,差一點就tle的ac了。看status裡的,ac的時間大多數都是0ms的。肯定有乙個更有效率的演算法的。下面說下我的狼狽演算法。出處 http acm.jlu.edu.cn joj showproblem.php?pid 1223 問題描述 求每個party的權值。第i...

Safebreaker 解題報告

又是吉林大學一道acm題目,題目很簡單,直接暴力解決。出處 http acm.jlu.edu.cn joj showproblem.php?pid 1718 問題描述 對乙個給定數0000 9999 根據一系列猜測,判斷這個數是否存在,存在的話,是否唯一 例如 3321,給定數 作出猜測,1223 ...