給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。
輸入首先給出正整數nn
(≤10^5
),為聯絡歷史條數。隨後n
行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。
在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中最小的號碼及其通話次數,並且附加給出並列狂人的人數。
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
13588625832 3
注意:1、狂人不唯一,要輸出最小的號碼,要另外輸出狂人的人數
2、用完的雜湊表的空間要釋放(好習慣,雖然不釋放也能通過)
#define maxtablesize 1000000 //允許開闢的最大雜湊表長度
#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 ;
int nextprime( int n )
return p;
}hashtable createtable ( int tablesize )
return h;
}index hash ( const char *key, int tablesize )
position find ( hashtable h, elementtype key )
bool insert ( hashtable h, elementtype key )
p->count++;
return false; }}
void destroytable( hashtable h )
} free( h->heads ); //釋放頭結點陣列
free( h ); //釋放雜湊表頭結點
}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 );
system("pause");
return 0;
}
11 雜湊1 電話聊天狂人 25 分
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則...
11 雜湊1 電話聊天狂人 25 分
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則...
11 雜湊1 電話聊天狂人 25 分
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中...