代码
@2018-01-04
以下是在线执行系统的结果,不代表复杂度
#include <iostream>
#include <map>
#include <string>
using namespace std;
map<string, int> mp;
int main()
{
int n;
while (cin>>n, n!=0)
{
string s,p;
int mx=0;
for (int i=0;i<n;i++)
{
cin>>s;
if (mp.find(s)==mp.end())
{
mp[s]=1;
if (1>mx)
{
mx=1;
p=s;
}
}
else
{
mp[s]++;
if (mp[s]>mx)
{
mx=mp[s];
p=s;
}
}
}
cout << p << endl;
}
}
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n,i,j,t;
char str[20],color[10000][20];
while(cin>>n&&n!=0)
{
int num[10000]={0},max=0;
for( i=1;i<=n;i++)
{
cin>>str;
for(j=1;j<=i;j++)
{
if(strcmp(str,color[j])==0)
{
num[j]++;
if(num[j]>max)
{
max=num[j];
t=j;
}
break;
}
}
if(j>i)
memcpy(color[j],str,sizeof(str));
}
cout<<color[t]<<endl;
}
return 0;
}
过程
以上全是抄的,自己尝试写过代码。思路上出现错误,然后卡壳了。
模拟的是人观测的方式,打眼一看,哪个颜色多少个球,然后输出,完工。
思路1,每次接收输入的时候,记录每种颜色球的个数。输入结束后,找到个数最多的,然后输出。
思路1的问题,如何在每次接收的时候统计个数,每接收一个就要遍历一次颜色是否重复么?相关的中间数据以什么样的形式存储呢。
思路2,先接收全部输入,然后再根据输入,进行个数统计。
思路2的问题,怎么遍历,还是要想办法存中间数据啊。感觉数组比vector要清晰啊。(实际上是我不熟悉vector的[])
#include<stdio.h>
#include<string>
#include<iostream>
#include <vector>
using namespace std;
struct ColorNum
{
string Color;
int n =0;
};
int main()
{
int Num = -1;
string strColor;
ColorNum strColorMost;
vector<string> tmp;
while (scanf("%d",&Num))
{
for (size_t i = 0; i < Num; i++)
{
cin >> strColor;
tmp.push_back(strColor);
}
}
return 0;
}