【CCF-CSP】05-02日期计算

题目描述

给定一个年份 y 和一个整数 d,问这一年的第 d 天是几月几日?

注意闰年的 2 月有 29 天。

满足下面条件之一的是闰年:

  1. 年份是 4 的整数倍,而且不是 100 的整数倍;
  2. 年份是 400 的整数倍。

输入格式

输入的第一行包含一个整数 y,表示年份,年份在 1900 到 2015 之间(包含 1900 和 2015)。

输入的第二行包含一个整数 d,d 在 1 至 365 之间。

输出格式

输出两行,每行一个整数,分别表示答案的月份和日期。

数据范围

1900≤y≤2015,

1≤d≤365

输入样例1:

2015

80

输出样例1:

3

21

输入样例2:

2000

40

输出样例2:

2

9

解题思路

1、首先输入年份和天数

2、根据题目提示:可以判断年份是否为闰年

3、定义月份的数组(分为闰年和平年),此题因为天数为总天数,所以月份也计算每个月及这个月之前·的天数

4、计算是几月:如果天数刚好等于这个月的最后一天,即为这个月;如果大于这个月的天数,则为这个月+1;

5、计算日期:直接用天数减去前一个月份数组的天数即可得到。

代码

cpp 复制代码
#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
	//定义年份y(year)和天数d(day)
	int y, d;
	//输入年份和天数 
	scanf("%d %d", &y, &d);
	
	//判断是否为闰年的标志 
	bool flag; 
	//判断年份是否为闰年
	if( ((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0) ){
		//是闰年则flag 为 1 
		flag = 1;
	}
	else{
		flag = 0;
	}
	
	//定义闰年的每月月份及加上次月份之前天数 
	int month_r[13] = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};
	//定义平年的每月月份及加上次月份之前天数 
	int month_p[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
	
	//定义月份、日期
	int month = 0, date = 0; 
	
	//如果是闰年,计算月份 
	if(flag == 1){
		for(int i = 0; i < 13; i ++){
			if(d > month_r[i]){
				month = i+1;
			}
			else if(d == month_r[i]){
				month = i;
			}
		}
	}
	//平年,计算月份 
	else{
		for(int i = 0; i < 13; i ++){
			if(d > month_p[i]){
				month = i+1;
			}
			else if(d == month_p[i]){
				month = i;
			}
		}
	} 
	
	//计算日期
	//如果是闰年
	if(flag == 1){
		date = d - month_r[month-1];
	}
	//平年 
	else{
		date = d - month_p[month-1];
	}
	//输出月份和日期
	printf("%d\n%d\n", month, date); 
	return 0;
}

恭喜你!又学会了一道CCF-CSP题目。这里是希望你越来越好的小全全!一起努力学习吧!

相关推荐
努力学习的小全全4 小时前
【CCF-CSP】06-01数位之和
c++·ccf-csp
努力学习的小全全2 天前
【CCF-CSP】05-01数列分段
数据结构·算法·ccf-csp
曦月逸霜8 个月前
第十六次CCF-CSP认证(含C++源码)
数据结构·c++·算法·ccf-csp
曦月逸霜8 个月前
第十次CCF-CSP认证(含C++源码)
数据结构·c++·算法·ccf-csp
曦月逸霜8 个月前
第五次CCF-CSP认证(含C++源码)
数据结构·c++·算法·ccf-csp
亿维数组2 年前
【ccf-csp题解】第2次csp认证-第四题-最优配餐-多源BFS
c++·算法·ccf-csp·多源bfs