总时间限制: 1000ms 内存限制: 65536kB
-
描述
-
若某个月13号恰好是星期五,则这一天被称为黑色星期五。已知某年的一月一日是星期w,并且这一年是闰年,
求出这一年所有13号那天是星期5的月份,按从小到大的顺序输出月份数字。(w=1..7)
输入
- 输入有多组,每组一行且为一个整数w, 指该年的一月一日是星期w。(1<=w<=7) 输出
- 每组数据输出一行,从小到大输出具有黑色星期五的月份,月份与月份之间用空格隔开。若没有月份具有黑色星期五,则输出NULL 样例输入
-
1
样例输出
-
9 12
思路:关键点在于判断每月的13号是不是星期五和每个月的第一天是星期几。
1、判断每月十三号是否为星期五:(13-(该月初不完整的一个星期所剩的天数))%7==5是否成立。
2、每个月的第一天计算:w=(每月天数-(该月初不完整的一个星期所剩的天数))%7+1.
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int w;
int a[13];
scanf("%d",&w);
memset(a,0,sizeof(a));
for(int i=1;i<=12;i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
{
if((13-(7-w+1))%7==5)
a[i]=1;
w=(31-(7-w+1))%7+1;
}
if(i==2)
{
if((13-(7-w+1))%7==5)
a[i]=1;
w=(29-(7-w+1))%7+1;
}
if(i==4||i==6||i==9||i==11)
{
if((13-(7-w+1))%7==5)
a[i]=1;
w=(30-(7-w+1))%7+1;
}
}
for(int i=1;i<=12;i++)
{
if(a[i]!=0)
printf("%d ",i);
}
printf("\n");
return 0;
}