欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 6112黑色星期五 蓝桥基拉姆森公式

发布时间:2025/4/16 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 HDU 6112黑色星期五 蓝桥基拉姆森公式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

若某个月13号恰好是星期五,则这一天被称为黑色星期五。已知某年的一月一日是星期w,并且这一年是闰年,
求出这一年所有13号那天是星期5的月份,按从小到大的顺序输出月份数字。(w=1..7)输入输入有多组,每组一行且为一个整数w, 指该年的一月一日是星期w。(1<=w<=7)输出

每组数据输出一行,从小到大输出具有黑色星期五的月份,月份与月份之间用空格隔开。若没有月份具有黑色星期五,则输出NULL

 

用基姆拉尔森公式得到

约定下式中 y-年,m-月,d-日,w-星期

w=(d+m*2+3*(m+1)/5+y+y/4-y/100+y/400+1)mod7

特别需要注意的是,当月份为1月或者二月是,日期需要有所变动

举个栗子,如果是1993-1-13,带入上面公式的日期需要变换为 1992-13-13

如果是1993-2-13,那么需要变换为 1992-14-13

注意:w==0?7:w

#include<cstdio>
using namespace std;


int m[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};


int main()
{
    int mon;
    while(scanf("%d",&mon) == 1)
    {
       for(int i = 1; i <= 12; i ++)
       {
               if((12+mon)%7 == 5)
               {
                   printf("%d",i);
                   if(i != 12) printf(" ");
               }
               mon = (m[i]+mon)%7; 
       } 
       printf("/n"); 
    }
    return 0;

}

HDU 6112:

 

今天是2017年8月6日,农历闰六月十五。

小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。

为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。

小贴士:在公历中,能被4整除但不能被100整除,或能被400整除的年份即为闰年。

 

 

Input

第一行为T,表示输入数据组数。

每组数据包含一个日期,格式为YYYY-MM-DD。

1 ≤ T ≤ 10000

YYYY ≥ 2017

日期一定是个合法的日期
 

 

 

Output

对每组数据输出答案年份,题目保证答案不会超过四位数。

 

 

Sample Input

3 2017-08-06 2017-08-07 2018-01-01

 

 

Sample Output

2023 2023 2024

 

 

Source

2017"百度之星"程序设计大赛 - 初赛(A)

 

#include <iostream> #include <cstring> #include <cstdio> using namespace std; int YYY,MM,DD,t; bool run_year(int y) {if(y%4==0&&y%100!=0||y%400==0){return true;}return false; } bool panduan2(int y) {if(!run_year(y)&&run_year(YYY)&&MM==2&&DD==29)return true; return false; } int panduan1(int y,int m,int d) {if(m==1||m==2){y-=1;m+=12;}int w=(d+m*2+(m+1)*3/5+y+y/4+y/400-y/100+1)%7;return w==0?7:w; }int main(){int Y,M,w;cin>>t;while(t--){cin>>YYY; getchar();cin>>MM; getchar();cin>>DD; getchar();w=panduan1(YYY,MM,DD);int ww;for(int i=YYY+1; ;++i){if(panduan2(i))//在这儿要对一个闰年的2-29号特殊判断一下 continue; ww=panduan1(i,MM,DD);if(w==ww){cout<<i<<endl;break;}}}return 0; }

output

standard output

已知 2011 年 11 月 11 日是星期五,问 YYYY 年 MM 月 DD 日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢 400 年闰的情况。

Input

输入只有一行 YYYY MM DD

Output

输出只有一行 W

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1 
  (计算出的结果直接是对应的星期几) ,当month=1或2时,需要将其改为month+12并且year-1

#include<bits/stdc++.h> using namespace std; int n; void solve() {int y,m,d;scanf("%d %d %d",&y,&m,&d);if(m==1||m==2) m+=12,y-=1;int w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1;cout<<w<<endl; } int main() {solve(); return 0; }

 

总结

以上是生活随笔为你收集整理的HDU 6112黑色星期五 蓝桥基拉姆森公式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。