原文:
试题编号: | 201509-2 |
试题名称: | 日期计算 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有29天。满足下面条件之一的是闰年: 1) 年份是4的整数倍,而且不是100的整数倍; 2) 年份是400的整数倍。 输入格式 输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。 输入的第二行包含一个整数d,d在1至365之间。 输出格式 输出两行,每行一个整数,分别表示答案的月份和日期。 样例输入 2015 80 样例输出 3 21 样例输入 2000 40 样例输出 2 9 |
试题分析:在日期计算中常常将每个月份天数加起来存放于数组中用于以后的操作,方便不少。判断哪个月第几天就与数组中存放数据有关,找到计算方法即可
AC代码:
#include<iostream>
using namespace std;
int arr[]={31,28+31,31+28+31,30+31+28+31,31+30+31+28+31,30+31+30+31+28+31,31+30+31+30+31+28+31
,31+31+30+31+30+31+28+31,30+31+31+30+31+30+31+28+31,31+30+31+31+30+31+30+31+28+31,30+31+30+31+31
+30+31+30+31+28+31,31+30+31+30+31+31+30+31+30+31+28+31};
bool isy(int y)//判断是否为闰年,是则返回true
{
if(y%400==0||(y%4==0&&y%100!=0))
return true;
return false;
}
void add()//若是闰年,2月份及后需要加一天
{
int i;
for(i=1;i<12;i++)
{
arr[i]+=1;
}
}
int main()
{
int i,y,d;
cin>>y;
cin>>d;
if(isy(y))//判断是否为闰年
add();
if(d<=31)
{
cout<<"1"<<endl;
cout<<d<<endl;
}
for(i=1;i<12;i++)
{
if(d>arr[i-1]&&d<=arr[i])
{
cout<<i+1<<endl;
cout<<d-arr[i-1]<<endl;
}
}
return 0;
}