百练 2964 日历题目 解题呈报

    添加时间:2013-6-25 点击量:

    1.链接:http://poj.grids.cn/practice/2964/


    2.题目:


    总时候限制:
    1000ms
    内存限制:
    65536kB
    描述
    在我们如今应用的日历中, 闰年被定义为能被4整除的年份,然则能被100整除而不克不及被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开端逝去的天数,你的任务是给出这一天是哪年哪月哪日礼拜几。
    输入
    输入包含若干行,每行包含一个正整数,默示从2000年1月1日开端逝去的天数。输入最后一行是−1, 不必处理惩罚。可以假设成果的年份不会跨越9999。
    输出
    对每个测试样例,输出一行,该行包含对应的日期和礼拜几。格局为“YYYY-MM-DD DayOfWeek”, 此中 “DayOfWeek” 必须是下面中的一个: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday 或 Saturday“。
    样例输入

    1730 
    
    1740
    1750
    1751
    -1

    样例输出

    2004-09-26 Sunday 
    
    2004-10-06 Wednesday
    2004-10-16 Saturday
    2004-10-17 Sunday

    提示
    2000.1.1. 是礼拜六

    3.代码:



     1 #include <iostream>
    
    2 #include <cstdio>
    3 #include <cstdlib>
    4 #include <cstring>
    5
    6 using namespace std;
    7
    8 int days_of_year[2] = {365366};
    9 int days_of_month[24] = {312831303130313130313031//312931303130313130313031};
    10 char days_of_week[7][20] = {SundayMondayTuesdayWednesdayThursdayFridaySaturday};
    11
    12 int main()
    13 {
    14 int day;
    15 int start_year,start_month,start_day,start_week;
    16 int is_leap_year;
    17 while(scanf(%d,&day),day!=-1
    18 {
    19 start_year = 2000;
    20 start_month = 1;
    21 start_day = 1;
    22 start_week = 6;
    23
    24
    25 start_week = (start_week + day) % 7;
    26
    27 //断定是否闰年
    28 if(start_year % 4 == 0 && !(start_year % 100 == 0 && start_year % 400 != 0))
    29 {
    30 is_leap_year = 1;
    31 }
    32 else
    33 {
    34 is_leap_year = 0;
    35 }
    36
    37 while(day >= days_of_year[is_leap_year])
    38 {
    39 start_year ++;
    40 day -= days_of_year[is_leap_year];
    41
    42 //断定是否闰年
    43 if(start_year % 4 == 0 && !(start_year % 100 == 0 && start_year % 400 != 0))
    44 {
    45 is_leap_year = 1;
    46 }
    47 else
    48 {
    49 is_leap_year = 0;
    50 }
    51 }
    52
    53 while(day >= days_of_month[is_leap_year12 + start_month - 1])
    54 {
    55 day -= days_of_month[is_leap_year12 + start_month - 1];
    56 start_month ++;
    57 }
    58
    59 start_day += day;
    60
    61
    62 printf(%d-%02d-%02d %s\n,start_year,start_month,start_day,days_of_week[start_week]);
    63 }
    64 return 0;
    65 }


    4.思路


    (1)起首要知道闰年的相干常识


    (2)模仿每年每月的策画过程

    所有随风而逝的都属于昨天的,所有历经风雨留下来的才是面向未来的。—— 玛格丽特·米切尔 《飘》
    分享到: