1. 程式人生 > >HDOJ 1004 水題(但有值得注意的地方)

HDOJ 1004 水題(但有值得注意的地方)

題意:統計出現最多次數的單詞

code1:

注意這個 需要判斷 是否越界(while迴圈位置),

#include<bits/stdc++.h>
using namespace std;

/*	
	題目很簡單 但是需要注意的是 最後幾個相等 的時候 會出現 陣列越界的問題 
*/
int main()
	{
		string color;
		int n;
		while(cin >> n && n!=0){
			vector<string> vec;
			for(int i = 0; i < n; ++i){
				cin >> color;
				vec.push_back(color);
			}
			sort(vec.begin(),vec.end());
			int i,ans = 0,len;
			string pop = vec[0];
			for(i = 1; i < vec.size();){
				len = 1;
				while(i < vec.size() && vec[i-1] == vec[i]){
					++i;
					++len;
					//cout << vec[i] << endl;  
				} 
				if(len > ans){
					ans = len;
					pop = vec[i-1];
				}
				++i;
			}
			cout << pop << endl;
		}
		
		return 0;
	}

code2: map

#include<bits/stdc++.h>
using namespace std;
typedef map<string,int> msi;

int main()
	{
		string color;
		int n;
		ios::sync_with_stdio(false);
		cin.tie(NULL);
		while(cin >> n && n != 0){
			msi mp;
			for(int i = 0; i < n; ++i){
				cin >> color;
				++mp[color];
			}
			msi::iterator it = mp.begin();
			int ans = -1;
			string pop;
			for(;it != mp.end(); ++it){
				if(it->second > ans){
					ans = it->second;
					pop = it->first;
				}
			}
			cout << pop <<endl;
		}
	
		return 0;	
	}