zoukankan      html  css  js  c++  java
  • USACO Section1.1 Friday the Thirteenth 解题报告

        friday解题报告 —— icedream61 博客园(转载请注明出处)

    ------------------------------------------------------------------------------------------------------------------------------------------------
    【题目】
      据说曾经的黑色星期五是13号?本题让我们看看13号与星期五是否比与别的日子更有缘。
      给出正整数n,请告诉我在“1900年1月1日”到“1900+n-1年12月31日”中,星期一到星期天各自有多少个13号。
      注意,输出时,顺序是周六、周日、周一、周二、周三、周四、周五,一共7个数,空格隔开。
    【数据范围】
      n<=400
    【输入样例】
      20
    【输出样例】
      36 33 34 33 35 35 34
    ------------------------------------------------------------------------------------------------------------------------------------------------
    【分析】
      做法很简单,每个月都有13号,所以枚举所有的月份就好了。过程中判断一下平年闰年,保证每月日子别算错就好。
    ------------------------------------------------------------------------------------------------------------------------------------------------
    【总结】
      这题写完交上去WA,一看发现输出要求是周六放在第一个……
      改完交上去又WA,这次怎么也找不出错来,结果要来了DYZ的AC代码,发现自己change函数三个return没写进if的大括号里,手生啊!
      吐槽:我的代码中有对n==0的特判,是因为我被USACO Translate上的翻译坑了……原题中n是正整数,被翻译成了非负数,我也是醉了……

    ------------------------------------------------------------------------------------------------------------------------------------------------

    【代码】

     1 /*
     2 ID: icedrea1
     3 PROG: friday
     4 LANG: C++
     5 */
     6 
     7 #include <iostream>
     8 #include <fstream>
     9 using namespace std;
    10 
    11 int add[1+12]={ 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    12 
    13 ifstream in("friday.in");
    14 ofstream out("friday.out");
    15 
    16 int n,r[7];
    17 
    18 void change(int y)
    19 {
    20     if(y%400==0) { add[2]=29; return; }
    21     if(y%100==0) { add[2]=28; return; }
    22     if(y%4==0) { add[2]=29; return; }
    23     add[2]=28;
    24 }
    25 void work()
    26 {
    27     cout<<"in work"<<endl;
    28     int state=6;
    29     for(int y=1900;y<=1900+n-1;++y)
    30     {
    31         change(y); cout<<"y="<<y<<"	day="<<add[2]<<endl;
    32         for(int m=1;m<=12;++m)
    33         {
    34             ++r[state]; //cout<<"m="<<m<<"	state="<<state;
    35             state=(state+add[m])%7; //cout<<"	add="<<add[m]<<endl;
    36         }
    37     }
    38     out<<r[6]<<' '<<r[0]<<' '<<r[1]<<' '<<r[2]<<' '<<r[3]<<' '<<r[4]<<' '<<r[5]<<endl;
    39 }
    40 
    41 int main()
    42 {
    43     in>>n;
    44     if(n==0) { out<<"0 0 0 0 0 0 0"<<endl; } else work();
    45     in.close(); out.close();
    46     return 0;
    47 }
  • 相关阅读:
    rhel7 编写CMakeList.txt编译运行MySQL官方例子代码
    记录下 rhel 7 安装MySQL 并重置root密码
    杨辉三角 可以不用二维数组的
    一个ACE 架构的 Socket Client
    一个ACE 架构的 C++ Timer
    一个C++版的网络数据包解析策略
    标记下 'net 查壳/脱壳/加壳' 工具
    C++动态加载DLL调用方法
    C# (灰度)加权平均法将图片转换为灰度图
    C# GMap下提供一个高德地图
  • 原文地址:https://www.cnblogs.com/icedream61/p/4321386.html
Copyright © 2011-2022 走看看