蓝桥杯题目 黑色星期五

蓝桥杯题目

黑色星期五

题目描述

十三号是星期五是一个特殊的日子?更确切的说,
一个月中的十三号是星期五比是其它的星期少?
为了解决这个问题,写一个程序计算根据给出的时期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;
} 

输出结果

蓝桥杯题目 黑色星期五_第1张图片

你可能感兴趣的:(ACM)