codevs 2600 13号星期几?

时间限制: 1 s
 空间限制: 8000 KB
 题目等级 : 黄金 Gold
题目描述 Description

从1900年1月1日(星期一)

开始经过的n年当中,每个月的13号这一天是星期一、星期二、星期三、......、星期日的次数分别是多少?

输入描述 Input Description

一行,一个整数(1<=n<=400)

输出描述 Output Description

一行7个整数,以空格相隔,(依次是星期一、星期二、星期三、......星期日的次数)

样例输入 Sample Input

1

样例输出 Sample Output

1  3  1  2  2  2  1

数据范围及提示 Data Size & Hint

1<=n<=500

 

屠龙宝刀点击就送

模拟 

#include <cstdio>

int n,cx[8],ts[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int pd(int a)
{
    if(a%4!=0||a%100==0&&a%400!=0||a%3200==0) return 0;
    else return 1;
}
int main()
{
    scanf("%d",&n);
    int xq=0,nian=1900;
    while(n)
    {
        if(pd(nian)) ts[2]=29;
        else ts[2]=28;
        int y=1;
        while(y!=13)
        {
            int t=0;
            xq=(xq+13)%7;
            if(xq==0) xq=7;
            cx[xq]++;
            if(y<12) xq=(xq+ts[y]-13)%7;
            else xq=(xq+ts[1]-13)%7;
            if(xq==0) xq=7;
            y++;
        }
        nian++;
        n--;
    }
    for(int i=1;i<=7;++i)
    printf("%d ",cx[i]);
    return 0;
}

 

posted @ 2017-04-08 20:01  杀猪状元  阅读(209)  评论(0编辑  收藏  举报