給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。
輸入首先給出正整數n(≤10
5 ),為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。
在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中最小的號碼及其通話次數,並且附加給出並列狂人的人數。
413005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
13588625832 3
生成比節點數大一點的素數作為表長度?
雜湊函式才用除留餘數法,所除的數即為比節點個數大一點的素數
處理衝突方法採用分離鏈結法
#include#include#includeusing namespace std;
#define keylength 11
#define maxd 5
#define maxtablesize 1000000
typedef char elementype[keylength + 1]; //『/0』需加一
typedef int index; //雜湊型別
typedef struct lnode *ptrtonode;
struct lnode;
typedef ptrtonode position;
typedef ptrtonode list;
typedef struct tblnode *hashtable;
struct tblnode;
int nextprime(int n)
return p;
}int hash ( int key, int p )
hashtable createtable(int tablesize)
return h;
}position find( hashtable h, elementype key )
bool insert( hashtable h, elementype key )
p->count++;
return false;
}}void scanandoutput( hashtable h )
else if (ptr->count == maxcnt)
ptr = ptr->next;}}
printf("%s %d", minphone, maxcnt);
if ( pcnt > 1 ) printf(" %d", pcnt);
printf("\n");
}int main()
scanandoutput( h );
// destroytable( h );
return 0;
}
11 雜湊1 電話聊天狂人 25分
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數nn 10 5 為聯絡歷史條數。隨後n 行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一...
11 雜湊1 電話聊天狂人 25 分
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則...
11 雜湊1 電話聊天狂人 25 分
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中...