# 題目: UVa 11286 – Conformity
# 題目說明
Waterloo 大學的新生因為興趣不同,而選擇不同的課
但學校希望他們選的課能盡量一樣,所以設置了一個獎項
- 最受歡迎的課程組合
寫一個程式找出最受歡迎的課程組合
INPUT:
每筆資料第一行為一個整數 n
,代表學生人數
接下來會有 n
行,每行有五個整數,代表選的課程
當 n
為 0
時結束程式
OUTPUT:
輸出最受歡迎的課程組合的人數
如果有多個最受歡迎的課程組合,則將人數加總
# 解題方法
先將每個課程組合排序,之後連接起來存入 string
將 string
存入 map
計算數量,數量最多的組合即為最受歡迎的課程組合
# 參考程式碼
#include <iostream> | |
#include <map> | |
#include <algorithm> | |
#include <vector> | |
using namespace std; | |
int main() | |
{ | |
int n, max_num, total; | |
map<string, int> course; | |
vector<string> class_num; | |
string input, line; | |
while (cin >> n && n != 0) { | |
max_num = 0; | |
total = 0; | |
course.clear(); | |
while (n--) { | |
line.clear(); | |
class_num.clear(); | |
for (int i = 0; i < 5; ++i) cin >> input, class_num.push_back(input); | |
sort(class_num.begin(), class_num.end()); | |
for (int i = 0; i < 5; ++i) line += class_num[i]; | |
++course[line]; | |
} | |
for (auto it = course.begin(); it != course.end(); ++it) | |
if (it->second > max_num) max_num = it->second; | |
for (auto it = course.begin(); it != course.end(); ++it) | |
if (it->second == max_num) total += max_num; | |
cout << total << endl; | |
} | |
return 0; | |
} |