• 数据结构练习


    计算今天是星期几

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

    输入 :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;
    }
    
  • 相关阅读:
    iOS开发_WKWebView
    蒲公英获取UDID和下载App使用指南
    UIScrollView 遇到了AutoLayout之后其contentSize 的计算
    资料 和 快捷操作
    ME01 创建货源清单
    ME51N 创建采购申请
    LT01 创建转储单
    MM01 物料主数据批导
    PS 创建网络去掉反冲增强
    BP 供应商创建与修改
  • 原文地址:https://www.cnblogs.com/wreng/p/15203386.html
Copyright © 2020-2023  润新知