這道題其實很簡單,直接開數組或者用map映射也好,為了練習trie樹,我就用trie來做了,而且用動態申請內存,無聊的我啊 [cpp] /***************************************************************** > File Name: t.c > Author: Lobo Chim > Created Time: 2013年01月24日 星期四 13時09分33秒 ****************************************************************/ #include <stdio.h> #include <string.h> #define CN 26 typedef struct node { struct node *child[CN]; int count; char s[16]; node() { count=0; int i; for(i=0;i<CN;i++) child[i]=NULL; } }NODE; void insert(NODE *root,const char *str) { int len=strlen(str); int i; NODE *cur=root; for(i=0;i<len;i++) { if(cur->child[str[i]-'a']!=NULL) { cur=cur->child[str[i]-'a']; } else { cur->child[str[i]-'a']=new NODE; cur=cur->child[str[i]-'a']; } } strcpy(cur->s,str); cur->count++; } void dfs(const NODE * root,char * &str,int &max) { int i,temp; for(i=0;i<CN;i++) { if(root->count > max) { max=root->count; str=(char *)root->s; } if(root->child[i]) dfs(root->child[i],str,max); } } void del(NODE *root) { int i; for(i=0;i<CN;i++) if(root->child[i]) del(root->child[i]); delete root; root=NULL; } int main() { int Case; while(scanf("%d",&Case)!=EOF && Case ) { int i; char s[16]; NODE *root=new NODE; for(i=0;i<Case;i++) { scanf("%s",s); insert(root,s); } char *p; int max=0; dfs(root,p,max); printf("%s\n",p); del(root); } return 0; }