知识点
- STL的map的使用(也可以用switch-case,如果弄不明白map的话)
 - 日期和星期的转换
 - 根据题目给的测试样例确定余数和星期的对应关系
 
map用法
map<string,int> monthTable;
这是创建Map。
    monthTable.insert(pair<string,int>("January",1));
    monthTable.insert(pair<string,int>("February",2));
    monthTable.insert(pair<string,int>("March",3));
    monthTable.insert(pair<string,int>("April",4));
    monthTable.insert(pair<string,int>("May",5));
    monthTable.insert(pair<string,int>("June",6));
    monthTable.insert(pair<string,int>("July",7));
    monthTable.insert(pair<string,int>("August",8));
    monthTable.insert(pair<string,int>("September",9));
    monthTable.insert(pair<string,int>("October",10));
    monthTable.insert(pair<string,int>("November",11));
    monthTable.insert(pair<string,int>("December",12)); 这是添加映射关系。
map<string,int>::iterator it = monthTable.find(monthString);
        int month = it->second; 这是查找的用法。一定要用迭代器!
代码
话不多说,学习了map以后,其他的问题就是经典的日期问题,可以看我之前的题解。代码如下:
#include <bits/stdc++.h>
using namespace std;
map<string,int> monthTable;
string week[7] = {"Friday","Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday"};
int days [2][12]={
    {31,28,31,30,31,30,31,31,30,31,30,31},
    {31,29,31,30,31,30,31,31,30,31,30,31},
};
int length[2] = {365,366};
bool isLeap(int year){
    if(year%400==0) return true;
    if(year%4==0&&year%100!=0) return true;
    return false;
}
int getNum(int year,int month,int day){
    int sum = 0;
    for(int i=0;i<year;i++){
        bool leap = isLeap(i);
        sum+=length[leap];
    }
    for(int i=1;i<month;i++){
        bool leap = isLeap(year);
        sum+=days[leap][i-1];
    }
    sum+=day;
    return sum;
}
int main(){
    monthTable.insert(pair<string,int>("January",1));
    monthTable.insert(pair<string,int>("February",2));
    monthTable.insert(pair<string,int>("March",3));
    monthTable.insert(pair<string,int>("April",4));
    monthTable.insert(pair<string,int>("May",5));
    monthTable.insert(pair<string,int>("June",6));
    monthTable.insert(pair<string,int>("July",7));
    monthTable.insert(pair<string,int>("August",8));
    monthTable.insert(pair<string,int>("September",9));
    monthTable.insert(pair<string,int>("October",10));
    monthTable.insert(pair<string,int>("November",11));
    monthTable.insert(pair<string,int>("December",12));
    int day,year;
    string monthString;
    while(cin>>day>>monthString>>year){
        map<string,int>::iterator it = monthTable.find(monthString);
        int month = it->second;
        int num = getNum(year,month,day);
        cout<<week[num%7]<<endl;
    }
    return 0;
} 
京公网安备 11010502036488号