第十一届蓝桥杯 国赛B.含 2 天数

 

   答案为:1994240 

  从1990年到9999年模拟每一天,数据量大概在一千万,直接暴力模拟,不讲任何技巧。

  三重循环模拟年、月、日,判断年数和月数决定每月有多少天,其中要注意闰年的要求是为4的倍数且不为100的倍数或为400的倍数,和4000没有关系!!之前做过某道题说4000的倍数也是平年,是错误的!!!对于每个日期组成8位日期编号,例如20220408送到find函数判断其中是否有2。

#include <stdio.h>
bool runnian(int y)
{
    if((y%4==0&&y%100!=0)||(y%400==0))return 1;
    return 0;
}
bool find(int x)
{
    while(x!=0)
    {
        if(x%10==2)return 1;
        x/=10;
    }
    return 0;
}
int main()
{
    int num=0,day;
    for(int y=1900;y<=9999;y++)
    {
        for(int m=1;m<=12;m++)
        {
            if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)day=31;
            else if(m==4||m==6||m==9||m==11)day=30;
            else if(runnian(y))day=29;
            else day=28;
            
            for(int d=1;d<=day;d++)
            {
                if(find(y*10000+m*100+d))num++;
            }
        }
    }
    printf("%d",num);
    return 0;
}

 

 

posted @ 2022-04-08 20:57  wisdom_jie  阅读(48)  评论(0编辑  收藏  举报