方法一
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
int nCount=0;
string strTmp;
while(cin>>nCount&&nCount!=0)
{
map<string,int> mapColor;//用map容器非常方便
for(int i=0;i<nCount;++i)
{
cin>>strTmp;
mapColor[strTmp]++;
}
map<string, int>::iterator iter;
int max = -1;
for(iter = mapColor.begin(); iter != mapColor.end(); iter++)
{//第一次遍历标记最大次数所在位置
if(iter->second>max)
{
max = iter->second;
}
}
for(iter = mapColor.begin(); iter != mapColor.end(); iter++)
{//第二次遍历找到标记的位置
if(iter->second==max)
{
cout<<iter->first<<endl;
}
}
}
return 0;
}
方法二
#include<stdio.h>
#include<string.h>
int main()
{
char s[1001][16],s1[16];
int N,i,j,p[1001],m,min,x,flag;
scanf("%d",&N);
while(N!=0)
{
for(i=0;i<N;i++)
{
strcpy(s[i],"/0");
p[i]=0;
}
m=0;
for(i=0;i<=N;i++)
{
gets(s1);
j=0;
flag=0;
while(j<i)
{
if(strcmp(s1,s[j])==0)
{
p[j]++;
break;flag=1;
}
j++;
}
if(flag==0)
{
strcpy(s[m],s1);
m++;
}
}
min=p[0]; x=0;
for(i=0;i<N;i++)
{
if(p[i]>min)
{
min=p[i];
x=i;
}
}
printf("%s/n",s[x]);
scanf("%d",&N);
}
return 0;
}