现在的位置: 首页 > 综合 > 正文

POJ 2080 Calender — from lanshui_Yang

2019年01月08日 ⁄ 综合 ⁄ 共 1216字 ⁄ 字号 评论关闭

题目大意:
       输入一个天数d,计算从2000年1月1日起,“经过”d天后 的日期 和 这一天是星期几。
(题目中并未给出2000年1月1日 是星期几,但从样例可以推算出 ~)
样例如下:
Input:
1730
1740
1750
1751
-1
Sample Output
2004-09-26 Sunday
2004-10-06 Wednesday
2004-10-16 Saturday
2004-10-17 Sunday

具体 解题思路 在代码中 详细讲解:


#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
using namespace std;
char date[7][15]= {"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
int run(int year)  // 判断闰年
{
    if((year%4==0&&year%100!=0)||(year%400==0))
    {
        return 1;
    }
    return 0;
}
int s1[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31}; // 不是闰年的年份的每个月的天数
int s2[13]= {0,31,29,31,30,31,30,31,31,30,31,30,31}; // 闰年的年份的每个月的天数
int main()
{
    int sum ;
    while (scanf("%d",&sum)!=EOF)
    {
        if(sum == -1)
            break;
        int year = 2000;
        int mon = 1;
        int ri =1;
        int m = sum%7 ;
        int i;
        int pan = 0;  // 变量 p 为 判断 变量
	  sum ++;// 注意:此处非常重要 ,题目说经过多少天,所以在这里先加 1  !!
        while (sum)
        {
            if(run(year))
            {
                if(sum<=366)
                {
                    for(i=1; i<=12; i++)
                    {
                        if(sum<=s2[i])
                        {
                            mon = i;
                            ri = sum;
                            pan =1;
                            printf("%d-%02d-%02d ",year,mon,ri);
                            cout<<date[m]<<endl;   //  此处要好好理解
                            break;
                        }
                        else
                        {
                            sum-=s2[i];
                        }
                    }
                }
                else
                {
                    year++;
                    sum-=366;
                }
                if(pan == 1)
                    break;
            }
            else
            {
                if(sum<=365)
                {
                    for(i=1; i<=12; i++)
                    {
                        if(sum<=s1[i])
                        {
                            mon = i;
                            ri = sum;
                            pan =1;
                            printf("%d-%02d-%02d ",year,mon,ri);
                            cout<<date[m]<<endl;
                            break;
                        }
                        else
                        {
                            sum-=s1[i];
                        }
                    }
                }
                else
                {
                    year++;
                    sum-=365;
                }
                if(pan == 1)
                    break;
            }
        }
    }
    return 0;

抱歉!评论已关闭.