天天看点

csp试题2:日期计算

csp试题2:日期计算

    • 题目
    • 分析
    • 代码
    • 总结

题目

问题描述

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

      注意闰年的2月有29天。满足下面条件之一的是闰年:

      1) 年份是4的整数倍,而且不是100的整数倍;

      2) 年份是400的整数倍。

输入格式

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

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

输出格式

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

样例1

输入:

2015
80
           

输出:

3
21
           

样例2

输入:

2000
40
           

输出:

2
9
           

分析

      想要知道第d天是几月几日,首先要知道的是这一年中12个月份各自的天数,12个月中只有2月的天数是会变化的,我们需要根据不同年份来设置2月的天数。

      知道了12个月的天数后,用d依次去减每个月份的天数,当所得结果小于等于0时,该月份就是对应的月份数,进行这次减法前的d就是该月的日数。

代码

/*
20190910
ccf试题2:日期计算 
*/ 

#include <iostream>
using namespace std;

int main(){
	//接受数据
	int year;
	int days;
	cin >>year >>days;
	
	//计算日期
	//初始化月份数据 
	int month_days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	if((year%4 == 0 && year%100 != 0) || (year%400 == 0)){
		month_days[1] = 29;
	}	 
	//计算 
	int month = 0;
	int day;
	while(days > 0){
		day = days;
		days = days - month_days[month];
		month++;	
	}
	cout <<month<<endl;
	cout <<day<<endl;
	
	return 0;
} 
           

总结

      迄今为止见过的最简单的ccf试题2。

继续阅读