POJ 2080 Calendar

应用直接存取类线性表编程:将日期存入数组中,到最后确定日期的时候直接对应数组下标取日期即可;

此题的核心思想是设计计算month和year具体有多少天的函数。

代码如下:

#include<iostream>
using namespace std;
 const char wstr[][20]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};//周几字符串常量
 int days_of_year(int year)//返回年的天数
 {
     if(year%100==0)
        return year%400==0? 366:365;
        return year%4==00 ? 366:365;
 }

 int days_of_month(int month,int year)//返回year年month月的天数
 {
     if(month==2)
        return days_of_year(year)==366 ? 29 : 28;
    int d;
    switch (month)
    {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            d=31;
        break;
        default: d=30;
    }
    return d;
 }
 int main()
 {
     int n;
     cin>>n;
     while(n>=0)
     {
         int year,month,day,week;
         week=n%7;  //这里将2000年1月1日为周六,作为一个星期的开始(因为法定周日为每周的第一天)
         year=2000;
         month=1;
         day=1;
         while(n)
         {
             if(n>=days_of_year(year))//枚举到指定年份
             {
                 n-=days_of_year(year);
                 ++year;
               //  cout <<year<<endl;
             }
             else if(n>=days_of_month(month,year))
             {
                 n-=days_of_month(month,year);//枚举到指定月份
                 ++month;
              //  cout<<month<<endl;
             }
             else
              {
                    day+=n;         //确定最后日期
                    n=0;
              }
         }
         //按规格输出
         cout<< year << '-' << (month< 10? "0": "") << month << '-' <<(day<10 ? "0":"") << day<<' '<< wstr[week] << endl;
         cin>>n;        //输入下一个测试用例


     }
    return 0;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值