给了一堆颜色,然后找出这一堆颜色中哪一个颜色出现的次数最多,输出这个颜色。我用map存入的各种颜色然后比较出一个最大的,再输出存的这个颜色就好了.....然而不知为何WA了= =暂时没找到错误在哪......先贴出来,以后再翻出来改= =
以下是WA的代码= =
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
char s[1005][105];
char e[105];
int main()
{
int n;
int k,i;
while(scanf("%d",&n)!=EOF)
{
map<string,int>m;
if(n==0)
break;
for(i=0;i<n;i++)
{
scanf("%s",s[i]);
}
for(i=0;i<n;i++)
{
m[s[i]]++;
}
strcpy(e,s[0]);
k=m[s[0]];
for(i=0;i<n;i++)
{
if(m[s[i]]>k)
strcpy(e,s[i]);
}
cout<<e<<endl;
}
return 0;
}
好吧,原来是我前面用的是char数组存的颜色,然后map的key定义的string类型,貌似不能这样用= =然而为何本地编译器能运行,还是对的......总之都改成用string类型就过了......
以下是修改后的AC代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
string s;
string e;
int main()
{
int n,t;
int k,i;
while(scanf("%d",&n)!=EOF)
{
map<string,int>m;
if(n==0)
break;
for(i=0;i<n;i++)
{
cin>>s;
m[s]++;
}
t=0;
map<string,int>::iterator p;
for(p=m.begin();p!=m.end();p++)
{
if(p->second>t)
{
t=p->second;
e=p->first;
}
}
cout<<e<<endl;
}
return 0;
}