版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
蓝桥杯题目
黑色星期五
题目描述
十三号是星期五是一个特殊的日子?更确切的说,
一个月中的十三号是星期五比是其它的星期少?
为了解决这个问题,写一个程序计算根据给出的时期N年每个月的十三号是星期几的频率,
这个为了测试的期间是从1900年1.1开始到12.31,1900+N-1是一个给出的年份,
N非负同时不大于400. 这里有一些注意在你解决这个问题之前:1900.1.1是星期一。
30天的有9、4、6、11,其余的有31天除了2月是28(闰年29天除外)
一年如果可以被4整除就是闰年(1992=4*489所以1992是闰年,但是1990不是闰年)
这个规则不适用于世纪之年,一世纪能被400整除是闰年,其它的不是。
因此,1700,1800,1900和2100不是闰年,而2000是闰年。
输入
一行,一个数N
输出
一行内,输出7个由空格分割的整数。依次表示13日出现在星期六,星期日,星期一,星期二……的次数。
样例输入
20
样例输出
36 33 34 33 35 35 34
题目源码
#include<stdio.h>
int n,k=6;
int day[10];
int month[15];
int main()
{
month[0]=31;
month[1]=31;
month[2]=28;
month[3]=31;
month[4]=30;
month[5]=31;
month[6]=30;
month[7]=31;
month[8]=31;
month[9]=30;
month[10]=31;
month[11]=30;
scanf("%d",&n);
day[6]++;
for(int i=0;i<n;i++)
{
month[2]=28;
if ( ((1900+i)%4==0 &&(1900+i)%100!=0) ||(1900+i)%400==0)
{
month[2]=29;
}
for(int j=1;j<=12;j++)
{
if(i==0 && j==1)
continue;
k=(k+month[j-1]%7)%7; //计算本月的13为星期几
if(k==0)
k=7;
day[k]++;
}
}
for(int i=6;i<=7;i++)
printf("%d ",day[i]);
for(int i=1;i<=5;i++)
printf("%d ",day[i]);
return 0;
}