设为首页 加入收藏

TOP

从“HDU 2005 第几天?”谈起(三)
2019-09-14 00:51:06 】 浏览:137
Tags:HDU 2005 谈起
二,3年元旦星期三,4年元旦星期四,…即

      week =(year)%7。

      由于闰年的存在会在2月多一天,因此,闰年的下一年元旦星期几应再加1,即 5年为星期六(不是星期五,因为 4年是闰年),因此需要知道前year-1年中有多少个闰年。闰年的规则简述就是每4年一个闰年,每100年不是闰年,每400年又是闰年。按集合包含与容斥规则,闰年个数有 (year-1)/4 - (year-1)/100 + (year-1)/400。

     因此,已知年号year,就可以根据year计算出该年元旦是星期几。计算公式如下:

         week=[ year+(year-1)/4-(year-1)/100+(year-1)/400]%7;

      (2)源程序。

#include <stdio.h>
int main()
{
      int table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
      char str[7][3]={"日","一","二","三","四","五","六"};
      int year,month,day,d,i,week;
      while (scanf("%d/%d/%d",&year,&month,&day)!=EOF)
      {
            week=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;
            d=0;
            for (i=1;i<=month-1;i++)
                d+=table[i];
            if (month>2 && (year%4==0 && year%100!=0 || year%400==0))
                d++;
            d=d+day;
            week=(week+d-1)%7;
            printf("%d 年 %d 月 %d日 星期%s\n",year,month,day,str[week]);
      }
      return 0;
}

弄懂了本例的编程思路,可以自己做一下 HDU 2133 “What day is it”。将上面的源程序略作修改即可。

 【例4】10月21日。(HDU 1491)

      2006年10月21日是杭州电子科技大学50周年校庆日。输入一个2006年的日期,输出其距离校庆日还有多少天。

      (1)编程思路。

      2006年是非闰年,因此不需要判断闰年。10月21日是当年第294天。根据输入的日期计算该日期是2006年的第几天(设为d),然后根据d与294的大小关系,输出相应的结果。

      (2)源程序。

#include <stdio.h>
int main()
{
      int table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
      int month,day,d,i,t;
      scanf("%d",&t);
      while (t--)
      {
             scanf("%d%d",&month,&day);
             d=0;
             for (i=1;i<=month-1;i++)
                   d+=table[i];
             d=d+day;
             if (d<294)
                    printf("%d\n",294-d);
            else if (d==294)
                    printf("It's today!!\n");
            else
                    printf("What a pity, it has passed!\n");
       }
      return 0;
}

 【例5】今夕何夕。 (HDU 6112)

      2019 年10月1日是中华人民共和国建国70周年。这天是星期二。思考这样一个问题:接下来最近的哪一年里的同一个日子,和建国70周年的星期数一样?比如2019年10月1日,星期二。下一个也是星期二的10月1日发生在2024年。

      输入一个日期yyyy-mm-dd,输出

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇第三周训练总结 下一篇The 2019 Asia Nanchang First Ro..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目