若某个月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;
}
|