USACO Section 1.1.3 Friday the Thirteenth

黑色星期五属于取余的稍微难点的题目,比较简单的思路就是一个月一个月的推算每个月的13号是星期几,即

1月份的13号由上一年的12月的13号上一年12月的天数推出

2月份的13号有今年的1月分的13号和今年的1月份的天数推出

3月份的13号由今年的2月份的13号和今年的2月份的天数推出

....................以此类推就可以了,只要注意一下今年的2月份的天数就可以了

注意输出顺序为 6 7 1 2 3 4 5


/*
ID: zhuihun1
PROG: friday
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
bool RunYear(int year)
{
    if(year%100==0&&year%400==0)
        return true;
    else if(year%100!=0&&year%4==0)
        return true;
    return false;
}
int main()
{
    ofstream fout ("friday.out");
    ifstream fin ("friday.in");
    int ai[7];
    memset(ai,0,sizeof(ai));
    int n;
    fin>>n;
    int t=2;
    for(int i=0;i<n;i++)
    {
        t=(t+31%7)%7;ai[t]++; //一月
        t=(t+31%7)%7;ai[t]++;//二月
        if(RunYear(1900+i)) t=(t+29%7)%7;  //三月
        else t=(t+28%7)%7;
        ai[t]++;
        t=(t+31%7)%7;ai[t]++; //4月
        t=(t+30%7)%7;ai[t]++; //5月
        t=(t+31%7)%7;ai[t]++; //6月
        t=(t+30%7)%7;ai[t]++; //7月
        t=(t+31%7)%7;ai[t]++; //8月
        t=(t+31%7)%7;ai[t]++; //9月
        t=(t+30%7)%7;ai[t]++; //10月
        t=(t+31%7)%7;ai[t]++; //11月
        t=(t+30%7)%7;ai[t]++; //12月
    }
    fout<<ai[5]<<" "<<ai[6];
    for(int i=0;i<5;i++)
            fout<<" "<<ai[i];
    fout<<endl;
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值