[蓝桥杯 2020 省 AB3] 日期识别

每日一道算法题之日期识别

一、题目描述

题目来源:洛谷

【蓝桥杯 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++程序要求输入输出如下:
输入格式

输入一个日期的英文形式。

输出格式

输出一行包含两个整数,分别表示日期的月和日。

示例如下:

cpp 复制代码
输入:Feb08           输出:2 8

二、思路

  本题我是采用暴力解 的办法,定义一个string类型的字符串s,用于接收输入,然后判断前三个字符和月份的对应关系,对于数字的转化,第三个字符减去字符'0',得到一个差值,这个差值再乘以十,加上第四个字符与字符'0'的差值就是得到转化后的数字。因此通过本题,学习到的一个处理办法就是如果之后题目需要你将字符数字转化为整型数字 ,可以考虑字符相减的办法。

三、C++代码

cpp 复制代码
#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;
    
}
相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
weilx12342 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
Smileyqp沛沛2 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark2 天前
大规模并行计算中的负载均衡算法研究4
算法
吞下星星的少年·-·2 天前
C++ 萌新语法入门篇
c++·算法比赛
Because_of_Her12 天前
并查集-听课笔记
笔记·算法·并查集