九度OJ 1070:今年的第几天?

来源:互联网 发布:广州网络编辑有限公司 编辑:程序博客网 时间:2024/05/16 18:45

题目描述:
输入年、月、日,计算该天是本年的第几天。
输入:
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
输出:
输入可能有多组测试数据,对于每一组测试数据,
输出一个整数,代表Input中的年、月、日对应本年的第几天。
样例输入:
1990 9 20
2000 5 1
样例输出:
263
122
来源:
2003年清华大学计算机研究生机试真题

#include <cstdio>#define isYeap(n) (n % 4 == 0 && n % 100 != 0)||(n%400 == 0) ? 1:0int monthDay[][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 day;    int month;    int year;    void nextDay(){        if(monthDay[month][isYeap(year)] == day){            day = 1;            month ++;            if(month > 12){                month = 1;year ++;            }        }else day++;    }};int dic[3001][13][32];int main(){    Date temp;    temp.day = 1;temp.month = 1;temp.year = 0;    int cnt = 0;    while(temp.year != 3001){        dic[temp.year][temp.month][temp.day] = cnt++;        temp.nextDay();    }    int y,m,d;    while(scanf("%d%d%d",&y,&m,&d) != EOF){        printf("%d\n",dic[y][m][d] - dic[y][1][1] + 1);    }}
原创粉丝点击