USACO section 1.1.3 黑色星期五

  黑色星期五~


题目大意:  从1900年1月1日开始,输入一个n,到1900+n-1年
    12月31日,统计这些天中的 13 号 分别落星期几。。


解决方案:
        (1)首先应该开一个长度至少为7的数组,来存放星期一到
    星期天。。
        

        (2)其次,就是有关闰年判别的算法,这个算法要当做一个模板
    记住,,,用的时候要 不加思考的立马秒出来啊,,,


 
bool inline is_leap( int year )
{
    if ( year%4 == 0&&year%100 != 0||year%400 == 0 )
    {
        return true;
    }
    else
    {
        return false;
    }
}




        (3)然后,就是对于怎样累加每次所得到的天数技巧。。。判断出1900年1月13日为星期6,I = 6;
        然后将每个月依次加到这个I上,在对I模7得到它是星期几,不满足1900+n-1这个条件为止

        (4)核心代码就是一个时间复杂度为O(n2)的for循环,外层for用来判断是否是闰年,是的话,更新mon[1]的值为29,

        每进行一次内循环都要维护下mon[1] 为28。。。



代码:

# include<iostream>
# include<cstdio>
# include<cmath>
# include<cstring>
# include<cstdlib>
# include<algorithm>

using namespace std;

int day[7];
int mon[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };

bool inline is_leap( int year )
{
    if ( year%4 == 0&&year%100 != 0||year%400 == 0 )
    {
        return true;
    }
    else
    {
        return false;
    }
}


int main(void)
{
    memset(day,0,sizeof(day));
    int n;
    cin>>n;
    n = n + 1900;
    int I = 6;//1900年1月13日 是 星期六
    for ( int i = 1900;i < n;i++ )
    {
        if ( is_leap( i ))
            mon[1] = 29;
        for ( int j = 0;j < 12;j++ )
        {
            day[I]++;
            I = I + mon[j];
            I = I % 7;
        }
        mon[1] = 28;
    }

    cout<<day[6];

    for ( int i = 0;i < 6;i++ )
    {
        cout<<' '<<day[i];
    }

    return 0;
}










  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值