• 蔡勒(Zeller)公式--黑色星期五


    求某年某月某日是周几;

    蔡勒(Zeller)公式: w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 ;
    y是年的后两位;
    c是世纪数-1(年的前两位);
    m是月份,大于等于3,小于等于14,某年的1、2月要看作上一年的13、14月来计算,例如2000年1月1日要按1999年13月1日来算;
    d是天数;
    [ ]代表取整;

    int Zeller(int Y, int m, int d)
    {
        int c,y,w;
        if (m < 3)
        {
            Y-=1;
            m+=12;
        }
        c = Y / 100;
        y = Y % 100;
        
        w = ( y+ y/4 + c/4 - 2*c + (26*(m+1)/10) + d - 1 ) % 7;
        if (w < 0) 
            w += 7; 
        return w;
    }

     有一道蓝桥杯的题:

     
    问题描述
      有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
      说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。
      输入格式:输入只有一行,即某个特定的年份(大于或等于1998年)。
      输出格式:输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。
      输入输出样例
    样例输入
    1998
    样例输出
    3
     
    #include<stdio.h>
    int Zeller(int Y, int m, int d);
    
    int main()
    {
        int year,num,i;
        while(scanf("%d",&year)!=EOF)
        {
            num=0;
            for(i=1;i<13;i++)
            {
                if(Zeller(year,i,13)==5)
                    num++;
            }
            printf("%d
    ",num);
        }
        return 0;
    }
    /* 
    蔡勒(Zeller)公式:  w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 ;
    y是年的后两位;
    c是世纪数-1;
    m是月份,大于等于3,小于等于14,某年的1、2月要看作上一年的13、14月来计算
    d是天数
    [ ]代表取整
    */ 
    
    int Zeller(int Y, int m, int d)
    {
        int c,y,w;
        if (m < 3)
        {
            Y-=1;
            m+=12;
        }
        c = Y / 100;
        y = Y % 100;
        
        w = ( y+ y/4 + c/4 - 2*c + (26*(m+1)/10) + d - 1 ) % 7;
        if (w < 0) 
            w += 7; 
        return w;
    }
  • 相关阅读:
    课程总结
    课程总结
    十四周实验报告&&课程总结
    记事本代码
    第十三周课程总结
    第十二周课程报告
    PTA实验 链表拼接 (20point(s))
    课程总结
    第十四周课程总结&实验报告
    第十三周课程总结
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4535910.html
Copyright © 2020-2023  润新知