每日一道算法題之日期識別
- 一、題目描述
- 二、思路
- 三、C++代碼
一、題目描述
題目來源:洛谷
【藍橋杯 2020 第三輪省賽 AB 組 F 題】小藍要處理非常多的數據, 其中有一些數據是日期。
在小藍處理的日期中有兩種常用的形式:英文形式和數字形式。英文形式采用每個月的英文的前三個字母作為月份標識,后面跟兩位數字表示日期,月份標識第一個字母大寫,后兩個字母小寫, 日期小于 10 時要補前導 0。1 月到 12 月英文的前三個字母分別是 Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec。數字形式直接用兩個整數表達,中間用一個空格分隔,兩個整數都不寫前 導 0。其中月份用 1 至 12 分別表示 1 月到 12 月。輸入一個日期的英文形式, 請輸出它的數字形式。
C++程序要求輸入輸出如下:
輸入格式
輸入一個日期的英文形式。
輸出格式
輸出一行包含兩個整數,分別表示日期的月和日。
示例如下:
輸入:Feb08 輸出:2 8
?
二、思路
??本題我是采用暴力解的辦法,定義一個string類型的字符串s,用于接收輸入,然后判斷前三個字符和月份的對應關系,對于數字的轉化,第三個字符減去字符‘0’,得到一個差值,這個差值再乘以十,加上第四個字符與字符‘0’的差值就是得到轉化后的數字。因此通過本題,學習到的一個處理辦法就是如果之后題目需要你將字符數字轉化為整型數字,可以考慮字符相減的辦法。
?
三、C++代碼
#include<bits/stdc++.h>
using namespace std;//日期識別 int main(){string s;cin>>s;int month,day;if(s[0]=='J') {if (s[1]=='a') month=1;else if(s[2]=='n') month=6;else month=7;}else if(s[0]=='F'){month=2;}else if(s[0]=='M'){if(s[2]=='r'){month=3;}else{month=5;} }else if(s[0]=='A'){if(s[1]=='p'){month=4;}else{month=8;} }else if(s[0]=='S'){month=9;}else if(s[0]=='O'){month=10;}else if (s[0]=='N'){month=11;}else{month=12;} day=(s[3]-'0')*10+(s[4]-'0');cout<<month<<" "<<day<<endl;}