給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。
輸入格式:
輸入首先給出正整數n(≤105 ),為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。
輸出格式:
在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中最小的號碼及其通話次數,並且附加給出並列狂人的人數。
輸入樣例:
4
13005711862
13588625832
13505711862
13088625832
13588625832
18087925832
15005713862
13588625832
輸出樣例:
#include
#include
#include
#include
#include
#define keylength 11
#define maxtablesize 100000
#define maxd 5
typedef
char elementtype[keylength+1]
;/* char陣列結尾是/0 */
typedef
int index;
typedef
struct lnode *ptrtolnode;
struct lnode
;typedef ptrtolnode position;
typedef ptrtolnode list;
typedef
struct tblnode *hashtable;
struct tblnode
;int
nextprime
(int n)
return p;
}hashtable createtable
(int tablesize )
return h;
}index hash
(int key,
int tablesize)
position find
( hashtable h, elementtype key )
bool insert
( hashtable h, elementtype key )
else
}scanfandoutput
(hashtable h)
else
if(ptr->count == maxcnt)
ptr = ptr->next;}}
printf
("%s %d"
,minphone,maxcnt);if
(pcnt>1)
printf
(" %d"
,pcnt);}
void
destroytable
(hashtable h)
}free
(h->heads)
;free
(h);
}int
main()
scanfandoutput
(h);
destroytable
(h);
return0;
}
將**號碼的後五位作為關鍵字,用atoi
函式轉化成五位int型整數,取餘法獲得位置,解決衝突的方法是分離鏈結法。
destroytable
函式先free頭結點後連線的所有節點,然後free頭結點陣列,最後free整個h。
演算法 雜湊1 電話聊天狂人
題目 給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯...
11 雜湊1 電話聊天狂人
來自 pta 資料結構 聊天狂人 給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入格式 輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。輸出格式 在一行中給出聊天狂人的手機號...
11 雜湊1 電話聊天狂人
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入格式 輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。輸出格式 在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如...