演算法 雜湊1 電話聊天狂人

2021-10-05 14:41:12 字數 1708 閱讀 3454

題目:給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。

輸入首先給出正整數n(≤10​5​​),為聯絡歷史條數。隨後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會按照...