Advertisement

上海计算机学会2021年3月月赛C++丙组T1疫苗接种

阅读量:
题目描述

小爱前去接种疫苗,注射完第一剂后,医生告诉她过 14 天后再来注射第二剂。给定接种第一剂疫苗的日期(以年-月-日表示),请输出注射第二剂的日期。

输入格式

若干字符:表示接种第一剂疫苗的日期。以 y-m-d 的形式表示,其中 y 表示年份、m 表示月份、d 表示天数。保证输入是一个有效的日期。

输出格式

若干字符:表示接种第二剂疫苗的日期,同样以 y-m-d 的形式表示。

数据范围
  • 2000≤y≤3000
  • 1≤m≤12
  • 1≤d≤31
样例数据

输入:

2021-3-12

输出:

2021-3-26

题解

本题关键点:

1.字符串输入,根据'-'截取年月日,并转换成整数。

2.判断输入月份共有几天,里面包含闰年的判断和大小月的判断 。

3.判断是否大于本月的天数。

4.判断是否过了本年 。

代码如下。

复制代码
 #include <iostream>

    
 #include <string>
    
 using namespace std;
    
 int main() {
    
 	int y, m, d;
    
 	string s;
    
 	cin>>s;
    
 	y=(s[0]-'0')*1000+(s[1]-'0')*100+(s[2]-'0')*10+(s[3]-'0');
    
 	if(s[6]!='-'){
    
 		m=(s[5]-'0')*10+(s[6]-'0');
    
 		if(s.size()==9){
    
 			d=s[8]-'0';
    
 		}else{
    
 			d=(s[8]-'0')*10+(s[9]-'0');
    
 		}
    
 	}else{
    
 		m=s[5]-'0';
    
 		if(s.size()==8){
    
 			d=s[7]-'0';
    
 		}else{
    
 			d=(s[7]-'0')*10+(s[8]-'0');
    
 		}
    
 	}
    
 	//判断输入月份共有几天 
    
 	int day=31;
    
 	if (m == 4 || m == 6 || m == 9 || m == 11) {
    
     day = 30;
    
     } else if(m == 2) {
    
     if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
    
         day = 29;
    
     } else{
    
     	day=28; 
    
 		} 
    
     }
    
     d+=14;
    
     //判断是否大于本月的天数 
    
 	if (d > day) {
    
     m++;
    
     d -= day;
    
     }
    
     //判断是否过了本年 
    
     if (m > 12) {
    
     m = 1;
    
     y++;
    
     }
    
 	cout<<y<<"-"<<m<<"-"<<d<<endl;
    
 	return 0;
    
 }
    
    
    
    

全部评论 (0)

还没有任何评论哟~