ccf 节日

怎么改都是40分,不知道哪里错了,看出来的朋友能不能指教一下?

#include <iostream>
#include <stdio.h> 
#include <string>
using namespace std;

int month_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
int begday[300];//存储某年的年末是星期几 
bool leapyear(int year)//判断是否是闰年 
{
    if(year%4==0&&year%100!=0)
    {
        return true;
    }
    if(year%400==0)
    {
        return true;
    }
    return false;
}
int main() {

    int month,week,day,year1,year2;
    cin>>month>>week>>day>>year1>>year2; 
    int sum=0;
    int id=0;
    for(int i=1850;i<year2;i++)
    {
        if(leapyear(i))
        {
            sum+=366;
        }
        else
        {
            sum+=365;
        }
        if(i>=year1-1&&i<year2)
        {
            begday[id]=sum%7-1+2;
            //printf("%d年年末是星期%d\n",i,begday[id]);
            id++;
        }
    }
    for(int i=year1;i<=year2;i++)
    {
        int b=begday[i-year1]+1;

        //printf("%d年1月1日是星期%d\n",i,b);
        int ss=0;
        int j; 
        for(j=1;j<month;j++)
        {
            if(leapyear(i)&&j==2)
            {
                ss+=29;
                month_day[2]=29;
            }
            else
            {
                ss+=month_day[j];
                month_day[2]=28;
            }
        }
        //int newss=(ss%7+b)%7;
        //printf("%d%d月1日是星期:%d\n",i,month,ss);
        int counter=0;
        for(j=1;j<=month_day[month];j++)
        {
            if(day==7)
            {
                if(((j+ss)%7+b-1)%7==0)
                {
                    counter++;
                    if(counter==week)
                {
                    printf("%d/%02d/%02d\n",i,month,j);
                    break;
                }
                }
            }
            else if(((j+ss)%7+b-1)%7==day)
            {
                counter++;
                if(counter==week)
                {
                    printf("%d/%02d/%02d\n",i,month,j);
                    break;
                }
            }
        }
        if(j>month_day[month])
        {
            printf("none\n");
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值