• USACO。s1.1.3Friday the Thirteenth(数组)


    题意:计算n年里的12 * n个月里,每个月的13号落在周日到周六的次数。

    思路&易错点:两个数组,一个数组1代表月份,一个数组2代表星期几,天数 % 7作为数组2的下标,自增。判断是否为闰年。某年的1月1号是周m,下一年的1月1号是周m + 1(闰年的话就m + 2,这个是开始时错了,找了几百年bug),就可以得到下一年的1月1号代表周几,继续mod.

    代码如下:

    /*
    TASK:friday
    LANG:C++
    ID:huibaochen
    */
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    int main()
    {
        freopen ("friday.in", "r", stdin);
        freopen ("friday.out", "w", stdout);
        int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int w[7], day, mod, n, last, k;
        while(scanf("%d", &n) != EOF) {
            memset(w, 0, sizeof(w));
            last = 0;
            for(int j = 1900; j < 1900 + n; j++){
                mod = k = 0;
                day = last;
    
                if(((j % 4 == 0) && ( j % 100 != 0)) || ( j % 400 == 0)){    //判断是否为闰年
                   month[1] = 29;
                   k = 1;
                }
                else
                    month[1] = 28;
    
                for(int i = 0; i < 12; i++){               //计算某一年中13号落在周一到周日的次数
                    if(i == 0)
                    day = day + 13;
                    else
                        day = day + month[i - 1];
                    mod = day  % 7;
                    w[mod]++;
                }
    
                if(k == 1)   //某年的一月一号为周m,那么下一年的一月一号为周m +1,例如1900.1.1是周一,1901.1.1是周二,所以下一年的day重last算起,闰年要+2;
                    last = last + 2;
                else
                    last++;
                last = last % 7;
            }
            printf("%d ", w[6]);
            for(int i = 0; i < 6; i++)
                printf("%d%c", w[i], i == 5 ? '\n' : ' ');
       }
        return 0;
    }
  • 相关阅读:
    jQuery语音播放插件
    Oracle(+)号用法
    重写IHttpHandler,实现前后端分离
    JavaScript运算符
    SQL Server 备份和还原
    ReactJS入门
    用Owin Host实现脱离IIS跑Web API单元测试
    Lua
    代码评比结果的反思
    我为什么要在总理来的第二天离开创业大街(转)
  • 原文地址:https://www.cnblogs.com/Joe962850924/p/4207141.html
Copyright © 2020-2023  润新知