看來許多大佬的**,感覺:小題大做 都好厲害啊,於是我便寫了乙個超短型的**
題面:給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。
輸入格式:
輸入首先給出正整數nnn(
n<=1
05
)(n<=10^)
(n<=1
05) ,為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。
輸出格式
在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中最小的號碼及其通話次數,並且附加給出並列狂人的人數。
樣例輸入
4輸出格式13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
13588625832 3思路:
輸入不用過多解釋,首先建mp(型別:map)然後邊輸入邊加,比如樣例中的第二行
13005711862 13588625832輸入完這兩個字串後就是我們熟悉的操作了:mp[你的變數名]++;
跑完for迴圈後mp裡的值都整好了,剩下的就是對取最大值和**號碼了,我們需要用乙個迭代器(先叫it了)跑一邊這個mp,找出最大值(mp中已經按字典序排好了,這裡不需要特判),此段**如下:
for
(mapint>
::iterator it=mp.
begin()
;it!=mp.
end();
++it)
}
上面這段**想必大家都能看懂,然後最後再輸出hhhc和maxn就好了
還沒玩看到題目的要求了嗎如果有通話次數相同的那麼就輸出通話次數相同的人的數量,我們需要用乙個變數(先叫它tt),然後再用迭代器跑一邊map用這個變數來記錄下次數相同的人的個數,此段**如下:
for
(mapint>
::iterator it=mp.
begin()
;it!=mp.
end();
++it)
}
有些人會問為什麼不能將兩次for合在一起呢?
我一開始寫也犯了這個錯,結果發現輸出的tt不對,這是因為這個判斷是要在找出最大的通話次數以後再判斷的,所以必須把兩個for分開不信自己去試試就知道了保準連樣例都不過
思路都講完了接下來就是完整**了,不要白嫖,起碼得關注一下吧.
#include
#include
#include
#include
using
namespace std;
int n;
intmain()
int tt;
for(mapint>
::iterator it=mp.
begin()
;it!=mp.
end();
++it)
}for
(mapint>
::iterator it=mp.
begin()
;it!=mp.
end();
++it)
} cout<" "
1) cout<<
" "
}//是不是很簡單
PAT 電話聊天狂人
看到乙個人的解題思路,學到了他的算時間的一種方法,特記錄一下 11 雜湊1 聊天狂人 25分 給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後 n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其...
電話聊天狂人
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則...
電話聊天狂人
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入格式 輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。輸出格式 在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如...