【CCF-CSP】05-02日期计算
题目描述
给定一个年份 y 和一个整数 d,问这一年的第 d 天是几月几日?
注意闰年的 2 月有 29 天。
满足下面条件之一的是闰年:
- 年份是 4 的整数倍,而且不是 100 的整数倍;
- 年份是 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、计算日期:直接用天数减去前一个月份数组的天数即可得到。
代码
#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题目。这里是希望你越来越好的小全全!一起努力学习吧!
