输出最多的颜色

Input
Input contains multiple test cases. Each test case starts with a number N (0 < N <= 1000) – the total number of balloons distributed. The next N lines contain one color each. The color of a balloon is a string of up to 15 lower-case letters.

A test case with N = 0 terminates the input and this test case is not to be processed.

Output
For each case, print the color of balloon for the most popular problem on a single line. It is guaranteed that there is a unique solution for each test case.

Sample Input
5
green
red
blue
red
red
3
pink
orange
pink
0

Sample Output
red
pink

解法1:

# include <stdio.h>
# include <string.h>

int main(){

char st[1005][20];
int i,j,k,n,len,t;

while(scanf("%d",&n),n){
for(i=0;i<n;i++){
scanf("%s",st[i]);
}

k = 0;
t = 0;
for(i=0;i<n;i++){
int j = i+1,cnt = 0 ;
for(;j<n;j++){
if(strcmp(st[i],st[j])==0){
cnt++;
}
}

if(cnt>t){
t = cnt;
k = i;
cnt = 0;
}
}

printf("%s\n",st[k]);
}


return 0;
}

解法2(map):

利用map(与java中treemap对应,,--- java的hashmap就是c++的unordered_map(无序)):
# include <iostream>
# include <map>
# include <string>

using namespace std;

int main(){

int n,i,j;
map<string,int> mapstr;
string str;

int max = 0;
string ch;
while(cin>>n,n){
max = 0;
while(n--){
cin>>str;
if(mapstr[str]==0){
mapstr[str] = 1;
}else{
mapstr[str]++;
}
//只所以这样处理是因为map排序
if(mapstr[str]>max){
max = mapstr[str];
ch = str;
}
}
cout<<ch<<endl;
mapstr.clear();

}


return 0;
}