切換
舊版
前往
大廳
主題

ZeroJudge - e836: P3. 數字統計 (Counting) 解題心得

Not In My Back Yard | 2020-03-16 00:11:12 | 巴幣 2 | 人氣 217

題目連結:


題目大意:
輸入第一列給定一正整數 N (3 ≦ N ≦ 1000),代表接著有 N 個數字(皆介於 -9999 ~ 9999 之間)。第二列即是這 N 個數值,彼此以空白隔開。

請找出這 N 個數字之中有幾種相異的數字,並且有哪些數字重複次數最高(輸出順序依照數字出現的順序)。如果沒有重複的數字(每種數字只出現一次),則輸出「NO」。輸出格式參見範例輸出。



範例輸入:
範例輸入一:
7
1 2 3 4 5 6 7

範例輸入二:
5
10 10 10 10 10

範例輸入三:
8
5 -10 -8 109 32 -10 5 32


範例輸出:
範例輸出一:
7
NO

範例輸出二:
1
10

範例輸出三:
5
5 -10 32


解題思維:
就是單純地用陣列儲存輸入的數字。可以使用一個來表示數字出現的順序(索引值越小代表在出現的越前面),並用來判斷新的數字有無出現過;另一個可用來計數,統計相應位置(對應於第一個陣列)的數字之出現次數。

統計完後,第一個陣列有的數字即是第一個所求。接著就用另一個陣列去儲存出現次數最大的那些數字,原理跟取最大值一樣——有新的、更大的「最大」值就將原本的陣列內容清空,並放入該數字;反之,如果有數字出現次數跟目前儲存的次數最大值一樣,則也將該數字放入陣列之中。

最後,輸出那些被儲存起來的數字。但是如果沒有數字出現超過 1 次,則輸出「NO」。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作