问题描述:
试题编号: | 201509-2 |
试题名称: | 日期计算 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 输入格式 输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。 输出格式 输出两行,每行一个整数,分别表示答案的月份和日期。 样例输入 2015 样例输出 3 样例输入 2000 样例输出 2 |
解题思路:
bool judge()判断是否是闰年
m[13]来保存每个月的天数
用一个变量cnt来计数当前经过的天数,
在for循环里判断,分三种情况
case1:加上当前月数会超过d,那么月份就是当前月份i,天数就是当前剩下的(d - cnt)
case2:加上当前月数等于d,那么月份就算当前月份,天数就是当前月份最后的日期天数
case3:不满足上述两种情况就累计天数,cnt += m[i]
解题代码:
#include<stdio.h>
#include<iostream>
using namespace std;
int y,d,month,day;
bool judge(int y){ //判断是否是闰年
if(y % 400 == 0 || (y % 100 != 0 && y % 4 == 0)) return true;
return false;
}
int m[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
scanf("%d%d",&y,&d);
int cnt = 0; //计数天数
for(int i = 1; i <= 12; i++){
if(judge(y) && i==2) m[i] = 29;
if(cnt + m[i] > d){month = i; day = d - cnt; break;}
if(cnt + m[i] == d){month = i; day = m[i];break;}
cnt += m[i];
}
printf("%d\n%d",month,day);
return 0;
}