Let the Balloon Rise----hdu-1004
Problem Description
Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the judges' favorite time is guessing the most popular problem. When the contest is over, they will count the balloons of each color and find the result.
This year, they decide to leave this lovely job to you.
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
問(wèn)題簡(jiǎn)述
存在多種顏色的氣球,第一行輸入“N”代表氣球的數(shù)量,余下N行每輸入由“1~15”個(gè)字母組成的顏色慰于。然后輸出最受歡迎的顏色,即出現(xiàn)次數(shù)最多的顏色退盯。當(dāng)“N=0”時(shí)終止程序。
程序分析
此題為map函數(shù)的入門水題泻肯,推薦用map函數(shù)做渊迁。
有關(guān)map函數(shù)知識(shí)簡(jiǎn)略如下:
map函數(shù)為key_value型。例如:map<string,int>choose 其中key對(duì)應(yīng)string灶挟,value對(duì)應(yīng)int琉朽。
1. map最基本的構(gòu)造函數(shù);
map<string , int >mapstring; map<int ,string >mapint;
map<sring, char>mapstring; map< char ,string>mapchar;
map<char ,int>mapchar; map<int ,char >mapint膏萧;
2. map添加數(shù)據(jù)漓骚;
map<int ,string> maplive;
1.maplive.insert(pair<int,string>(102,"aclive"));
2.maplive.insert(map<int,string>::value_type(321,"hai"));
3, maplive[112]="April";//map中最簡(jiǎn)單最常用的插入添加蝌衔!
3榛泛,map中元素的查找:
find()函數(shù)返回一個(gè)迭代器指向鍵值為key的元素,如果沒(méi)找到就返回指向map尾部的迭代器噩斟。
map<int ,string >::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<<endl;
else cout<<"wo find 112"<<endl;
4,map中元素的刪除:
如果刪除112曹锨;
map<int ,string >::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<<endl;
else maplive.erase(l_it); //delete 112;
5,map中 swap的用法:
Map中的swap不是一個(gè)容器中的元素交換,而是兩個(gè)容器交換剃允;
For example:
#include <map>
#include <iostream>
using namespace std;
int main( )
{
map <int, int> m1, m2, m3;
map <int, int>::iterator m1_Iter;
m1.insert ( pair <int, int> ( 1, 10 ) );
m1.insert ( pair <int, int> ( 2, 20 ) );
m1.insert ( pair <int, int> ( 3, 30 ) );
m2.insert ( pair <int, int> ( 10, 100 ) );
m2.insert ( pair <int, int> ( 20, 200 ) );
m3.insert ( pair <int, int> ( 30, 300 ) );
cout << "The original map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter->second;
cout << "." << endl;
// This is the member function version of swap
//m2 is said to be the argument map; m1 the target map
m1.swap( m2 );
cout << "After swapping with m2, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
cout << "After swapping with m2, map m2 is:";
for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
// This is the specialized template version of swap
swap( m1, m3 );
cout << "After swapping with m3, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
}
6.map的sort問(wèn)題:
Map中的元素是自動(dòng)按key升序排序,所以不能對(duì)map用sort函數(shù):
For example:
#include <map>
#include <iostream>
using namespace std;
int main( )
{
map <int, int> m1;
map <int, int>::iterator m1_Iter;
m1.insert ( pair <int, int> ( 1, 20 ) );
m1.insert ( pair <int, int> ( 4, 40 ) );
m1.insert ( pair <int, int> ( 3, 60 ) );
m1.insert ( pair <int, int> ( 2, 50 ) );
m1.insert ( pair <int, int> ( 6, 40 ) );
m1.insert ( pair <int, int> ( 7, 30 ) );
cout << "The original map m1 is:"<<endl;
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << m1_Iter->first<<" "<<m1_Iter->second<<endl;
}
The original map m1 is:
1 20
2 50
3 60
4 40
6 40
7 30
請(qǐng)按任意鍵繼續(xù). . .
7, map的基本操作函數(shù):
C++ Maps是一種關(guān)聯(lián)式容器斥废,包含“關(guān)鍵字/值”對(duì)
begin() 返回指向map頭部的迭代器
clear() 刪除所有元素
count() 返回指定元素出現(xiàn)的次數(shù)
empty() 如果map為空則返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊條目的迭代器對(duì)
erase() 刪除一個(gè)元素
find() 查找一個(gè)元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比較元素key的函數(shù)
lower_bound() 返回鍵值>=給定元素的第一個(gè)位置
max_size() 返回可以容納的最大元素個(gè)數(shù)
rbegin() 返回一個(gè)指向map尾部的逆向迭代器
rend() 返回一個(gè)指向map頭部的逆向迭代器
size() 返回map中元素的個(gè)數(shù)
swap() 交換兩個(gè)map
upper_bound() 返回鍵值>給定元素的第一個(gè)位置
value_comp() 返回比較元素value的函數(shù)
AC程序如下:
//hdu-1004
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
string color, maxcolor;
int N;
map<string, int>choose;//聲明一個(gè)map容器choose
while (cin >> N&&N!=0)//當(dāng)N=0時(shí)結(jié)束
{
int max = 0;
choose.clear();//刪除choose中所以元素
for (int i = 0; i < N; i++)
{
cin >> color;
choose[color]++;//若key不同椒楣,則創(chuàng)建一個(gè)新的map元素。若key值相同牡肉,則該key元素的value加一
}
map<string, int>::iterator G;//聲明一個(gè)迭代器G
for (G = choose.begin(); G != choose.end(); G++)
{
if ((G->second) > max)
{
max = (G->second);
maxcolor = (G->first);
}
}
cout << maxcolor << endl;
}
return 0;
}