題目:給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。
輸入首先給出正整數n(≤105),為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。
在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中最小的號碼及其通話次數,並且附加給出並列狂人的人數。
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
13588625832 3
解答:程式**:
#define _crt_secure_no_warnings
#include #include #include #include using namespace std;
#define maxd 5 //
typedef char elementtype[keylength + 1];
typedef int index; // 雜湊位址型別
typedef struct lnode *ptrtolnode;
struct lnode ;
typedef ptrtolnode position;
typedef ptrtolnode list;
typedef struct tblnode *hashtable;
struct tblnode ;
#define maxtablesize 1000000
int nextprime(int n)
return p;
}int hash(int key, int p)
hashtable createtable(int tablesize)
return h;
}position find(hashtable h, elementtype key)
bool insert(hashtable h, elementtype 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()
{ int n, i;
elementtype key;
hashtable h;
scanf("%d", &n);
h = createtable(n * 2); /* 建立乙個雜湊表 */
for (i = 0; i測試結果:
11 雜湊1 電話聊天狂人
來自 pta 資料結構 聊天狂人 給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入格式 輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。輸出格式 在一行中給出聊天狂人的手機號...
11 雜湊1 電話聊天狂人
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入格式 輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。輸出格式 在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如...
11 雜湊1 電話聊天狂人
11 雜湊1 聊天狂人 題意 給出n個聯絡歷史,每個聯絡歷史分別包含兩個 號碼,計算出通話次數最多的號碼和其通話次數。如果有多個通話次數最多的號碼,輸出號碼最小的那個且再輸出通話次數最多的號碼個數。思路 用map容器把每個號碼與通話次數聯立起來,最後遍歷一遍map找到通話次數最多的號碼。map會按照...