week4-[字符数组]月份
week4-[字符数组]月份
题目描述
1月到12月的英语单词分别为:January、February、March、April、May、June、July、August、September、October、November、December。
现在给定其中11个月份的英语单词,请求出没有出现的那个月份对应的英语单词。
输入格式
输入11行,每行读入一个字符串,为某个月份对应的英语单词。保证输入的11个字符串互不相同。
输出格式
输出1行,该行包括一个字符串,为在输入中没有出现的那个月份对应的英语单词。
样例 #1
样例输入 #1
August
May
June
July
September
January
February
March
November
December
April
样例输出 #1
October
样例 #2
样例输入 #2
January
October
July
May
December
August
September
June
April
February
March
样例输出 #2
November
样例 #3
样例输入 #3
August
April
February
May
January
October
July
November
December
March
September
样例输出 #3
June
这题比较经典,本质就是 找出全集(12个月份)中缺失的那个元素。
解题思路
-
我们先准备一个完整的月份数组:
string months[12] = {"January","February","March","April","May","June","July","August","September","October","November","December" };
-
用一个 哈希表(map/set) 来存储输入的 11 个字符串。
-
遍历
months[12]
,查找哪个不在输入集合里,就是答案。
C++参考代码
#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);// 1. 完整月份表string months[12] = {"January","February","March","April","May","June","July","August","September","October","November","December"};// 2. 输入集合set<string> s;for (int i = 0; i < 11; i++) {string str;cin >> str;s.insert(str);}// 3. 找缺失的月份for (int i = 0; i < 12; i++) {if (s.find(months[i]) == s.end()) {cout << months[i] << "\n";break;}}return 0;
}
✅ 时间复杂度:O(12 + 11 log 11)
,常数极小,可以忽略。
✅ 空间复杂度:O(11)
。