描述
输入年、月、日,计算该天是本年的第几天。
输入描述:
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
输出描述:
输入可能有多组测试数据,对于每一组测试数据, 输出一个整数,代表Input中的年、月、日对应本年的第几天。
示例1
输入:
1990 9 20
2000 5 1
输出:
263
122
知识点: 暴力求解 模拟 日期问题
解法:
方案一:先计算前几个月天数和,再加上本月天数
方案二:万能模板。利用while循环,从本年1月1日开始计算nextday。
方案一AC代码:
#include <stdio.h>
int main() {
int y, m, d;
int monDay[13] = {0 , 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int totalDay;
while(scanf("%d %d %d", &y, &m, &d) != EOF) {
if(y % 400 == 0 || y % 100 != 0 && y % 4 == 0)
monDay[2] = 29;
else
monDay[2] = 28;
totalDay = 0;
for(int i = 2; i <= m; i++)
totalDay += monDay[i - 1];
totalDay += d;
printf("%d\n", totalDay);
}
return 0;
}
方案二AC代码:
#include <stdio.h>
int main() {
int y, m, d;
int monDay[13] = {0 , 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int totalDay;
int beginy, beginm , begind;
while(scanf("%d %d %d", &y, &m, &d) != EOF) {
if(y % 400 == 0 || y % 100 != 0 && y % 4 == 0)
monDay[2] = 29;
else
monDay[2] = 28;
totalDay = 1;
beginy = y, beginm = 1, begind =1;
while(1) {
if(beginm == m && begind == d)
break;
totalDay ++;
begind ++;
if(begind > monDay[beginm]) {
beginm ++;
begind = 1;
}
}
printf("%d\n", totalDay);
}
return 0;
}