zoukankan      html  css  js  c++  java
  • Friday the Thirteenth 黑色星期五 USACO 模拟 超级简单做法

    1003: 1.1.3 Friday the Thirteenth 黑色星期五

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 8  解决: 8
    [提交] [状态] [讨论版] [命题人:外部导入]

    题目描述

    1.1.3 Friday the Thirteenth 黑色星期五

    (friday.pas/c/cpp)

       13号又是一个星期五。13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出N年的一个周期,要求计算1900年1月1日至1900+N-1年12月31日中十三号落在周一到周日的次数,N为正整数且不大于400.

    这里有一些你要知道的:

    1、1900年1月1日是星期一.
    2、4,6,11和9月有30天.其他月份除了2月都有31天.闰年2月有29天,平年2月有28天.
    3、年份可以被4整除的为闰年(1992=4*498 所以 1992年是闰年,但是1990年不是闰年).
    4、以上规则不适合于世纪年。可以被400整除的世纪年为闰年,否则为平年。所以,1700,1800,1900和2100年是平年,而2000年是闰年.

    请不要调用现成的函数

    请不要预先算好数据(就是叫不准打表)!

    格式

    PROGRAM NAME: friday

    INPUT FORMAT:

    (friday.in)

    一个正整数n.

    OUTPUT FORMAT:

    (friday.out)

    七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一...星期五的次数..

    输入格式

    20
    

    输出格式

    36 33 34 33 35 35 34

     

    提示

     

    来源/分类

    这道题其实我也想了很久

    首先思路1 一天一天枚举 不用说肯定超时

    2 一月一月枚举 n<=400 12*400还行没问题!

    那么我们就这么做啦

    那么怎么处理每个月之间的转化呢

    这里我想到了一个非常神奇的做法(看日历)

    我把 平年 中相邻月份的13号是星期几找出来,假如1月13日是星期3,2月13日是星期6  就相差了3天 那么我建一个表(不算打表吧)

     between[1]=3代表1月和2月 的13号所在的星期几 的那个“几”相差多少 (有点绕O(∩_∩)O哈哈~)

    那这样子肯定每一年都是相似的差值

    只是在闰年的时候between[2]+1就变成了1即可

    事实证明,我这个全网最神奇的做法是可行的!

    太开心了想了半个小时

     

    其实以后我还是要多善于思考一下

    思考一下没准你就会雨过天晴 海阔天空!

     

     

    神奇代码如下:O(∩_∩)O哈哈~

    #include<bits/stdc++.h>
    using namespace std;
    int between[13]={0,3,0,3,2,3,2,3,3,2,3,2,3};//看日历打表  
    int sum[8];
    int judge(int year,int month){
        if(month!=2)
            return 0;
        if(year%4==0&&year%100!=0  || year%400==0)
            return 1;
        return 0;
    }
    int main()
    {
        int n;
        cin>>n;
        int Day13inweek=6;
        for(int i=1900;i<1900+n;i++) 
            for(int j=1;j<=12;j++)//枚举月 
            {
                sum[Day13inweek]++;
                Day13inweek+=between[j];
                if(judge(i,j))
                    Day13inweek++;
                if(Day13inweek>7)
                    Day13inweek%=7;
            }
        cout<<sum[6]<<" "<<sum[7]<<" "<<sum[1]<<" "<<sum[2]<<" "<<sum[3]<<" "<<sum[4]<<" "<<sum[5];
        return 0;
    }

     

  • 相关阅读:
    阿里云RDS的mysql数据库连接
    DRF框架400错误信息处理(视图集)
    关于百度Tongji Api的文档补充
    Python几种创建list的方法的效率对比
    手把手教你使用python复杂一点点的装饰器
    Python爬虫常用模块,BeautifulSoup笔记
    LSSS 构造过程
    微信网站应用扫码登陆
    分享一个自用的 Inno Setup 软件打包脚本
    彻底解决:请求被中止: 未能创建 SSL/TLS 安全通道
  • 原文地址:https://www.cnblogs.com/Tidoblogs/p/11270243.html
Copyright © 2011-2022 走看看