zoukankan      html  css  js  c++  java
  • 数据结构练习

    计算今天是星期几

    输入今天的年份,月份和日期,输出今天是周几?

    输入 :y m d

    输出:k

    余数公式:

    [(a_1 + a_2 + cdots + a_k) mathrm{mod} N = (a_1 mathrm{mod} N + a_2 mathrm{mod} N + cdots + a_k mathrm{mod} N) mathrm{mod} N ]

    闰年的判断:(满足以下其中条件即可)

    1. 年份能被4整除,但是不能被100整除(普通闰年)
    2. 年份能被400整除(世纪闰年)

    从公元0000年开始算起到去年 y-1,闰年的个数有(lfloor frac{y-1}{4} floor - lfloor frac{y-1}{100} floor + lfloor frac{y-1}{400} floor)
    平年 365天对 7的余数为 1,闰年 366天对 7的余数为 0,则从0000年到去年的天数对7的余数为(y' = y-1 + lfloor frac{y-1}{4} floor - lfloor frac{y-1}{100} floor + lfloor frac{y-1}{400} floor)

    再计算出今年1月到前月m-1的天数对7的余数(m')(注意闰年2月份天数+1);

    最后计算得到结果: ((y' + m' + d) mathrm{mod} 7)


    #include <bits/stdc++.h>
    using namespace std;
    
    /*
    余数公式:
    (a1+a2+a3+...+ak) mod N = (a1 mod N + a2 mod N + a3 mod N +...+ ak mod N ) mod N
    */
    
    int main()
    {
        int y, m, d;
        int dy, dm, dd;
        int sum; 
        int months[12] = {31, 28, 31, 30, 31, 30, 
                          31, 31, 30, 31, 30, 31};
        scanf("%d%d%d", &y, &m, &d);
        
        // 计算从去年 y-1到 0000年对 7的余数,
        // 平年 365天对 7的余数为 1,
        // 闰年 366天对 7的余数为 0,
        // 闰年是指满足以下其中一个条件的年份:
        // 1. 能被4整除但不能被400整除(普通闰年)
        // 2. 能被400整除(世纪闰年)
        dy = (y-1) + (y-1)/4 - (y-1)/100 + (y-1)/400;
        
        // 计算今年1月到 m-1月的总天数对 7 的余数
        sum = 0;
        for(int i = 1; i <= m - 1; ++i){
            sum = sum + months[i-1];
        }
        dm = sum % 7;
        // 闰年再加1天
        if ( m>=2 && ((y%4==0 && y%100!=0) || (y%400==0))){
            dm = (dm + 1) % 7;
        }
    
        // 天数差加起来再求余数
        dd = (dy + dm + d) % 7;
        printf("%d
    ", dd);
    
        return 0;
    }
    
  • 相关阅读:
    POJ 3253 Fence Repair
    POJ 2431 Expedition
    NYOJ 269 VF
    NYOJ 456 邮票分你一半
    划分数问题 DP
    HDU 1253 胜利大逃亡
    NYOJ 294 Bot Trust
    NYOJ 36 最长公共子序列
    HDU 1555 How many days?
    01背包 (大数据)
  • 原文地址:https://www.cnblogs.com/wreng/p/15203386.html
Copyright © 2011-2022 走看看