题目1070:今年的第几天?
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:3923
解决:2185
-
题目描述:
-
输入年、月、日,计算该天是本年的第几天。
-
输入:
-
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
-
输出:
-
输入可能有多组测试数据,对于每一组测试数据,输出一个整数,代表Input中的年、月、日对应本年的第几天。
-
样例输入:
-
1990 9 20 2000 5 1
-
样例输出:
-
263 122
-
答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7794-1-1.html
-
-
#include <stdio.h> #include <algorithm> #include <math.h> #define IsYear(a) a%4==0 && a%100!=0 || a%400==0 ? 1:0 using namespace std; int day_of_month[13][2]={ 0,0, 31,31, 28,29, 31,31, 30,30, 31,31, 30,30, 31,31, 31,31, 30,30, 31,31, 30,30, 31,31 }; struct Date { int Year; int Month; int Day; void NextDay(){ Day++; if(Day>day_of_month[Month][IsYear(Year)]) { Day=1; Month++; if(Month>12) { Month=1; Year++; } } } }; int buf[5001][13][32]; int main() { Date temp; int count=0; temp.Day=1; temp.Month=1; temp.Year=0; while(temp.Year<5001) { buf[temp.Year][temp.Month][temp.Day]=count; temp.NextDay(); ++count; } int y1,m1,d1; while(scanf("%d%d%d",&y1,&m1,&d1)!=EOF) printf("%d\n", buf[y1][m1][d1]-buf[y1][1][1]+1); return 0; }