zoukankan      html  css  js  c++  java
  • 洛谷 P1202 模拟

    【题目描述】

    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年是闰年.

    请不要调用现成的函数

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

    【输入】

    一个正整数n.

    【输出】

    **输出请从周六开始

    【输入样例】

    20

    【输出样例】

    36 33 34 33 35 35 34

    【算法分析】

    模拟。

    1900年1月1日是星期一,所以1月2日是星期二,1月3是星期三……

    1月8是8%7=1,星期一,以此类推。

    求每个月13号,所以先有个基础值13.

    开个数组存每月几天,然后模拟。

    每一次统计完加上下个月份,

    表示过了几天,到了下个月的13号。

    然后就用此数%7=x,统计数组[x]++。

    输出记得从周六开始

    【AC代码】

     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 int n,sum,mark,day[7];
     5 int main()
     6 {
     7     
     8     int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
     9     memset(day,0,sizeof(day));
    10     cin>>n;
    11     sum+=13;
    12     for(int i=1900;i<=1900+n-1;i++)
    13     {
    14         
    15         for(int j=1;j<=12;j++)
    16         {
    17             day[sum%7]++;
    18             if(j==2)
    19                 if(i%400==0|| (i%100!=0 && i%4==0))
    20                     {sum=sum+1;}
    21             sum=sum+month[j];
    22         }
    23     }
    24     cout<<day[6]<<" ";
    25     for(int i=0;i<=5;i++) cout<<day[i]<<" ";
    26     return 0;
    27 }
    作者:tyqEmptySet
  • 相关阅读:
    /usr/bin/ld: 找不到 /usr/lib64/libatomic.so.1.0.0
    linux Version mismatch error. This is libtool 2.4.6 Debian-2.4.6-2
    java播放语音文件
    java冒泡排序
    java递归求和
    常见芯片标号说明
    keil5 新建 stm32项目 步骤
    st-link 升级固件时报错“is not in the DFU mode”
    数码管 段选位选
    C51 定时器
  • 原文地址:https://www.cnblogs.com/tyqEmptySet/p/10075846.html
Copyright © 2011-2022 走看看