江西财经大学第一届程序设计竞赛 B

链接:https://www.nowcoder.com/acm/contest/115/B
来源:牛客网

题目描述

给出一个出生日期,比如:1999-09-09,
问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?

输入描述:

第一行输入一个整数T(表示样例个数)
接下来T组样例
每个样例一行,包含一个字符串“yyyy-mm-dd”(1990<=yyyy<=2018)
题目保证测试数据的正确性

输出描述:

输出题意要求的天数
示例1

输入

1
1999-09-09

输出

5020
是我写长了...
#include<iostream>
#include<string>
#include<stdio.h>
#include<map>
using namespace std;
map<int,int>Mp;
int main(){
    Mp[1]=1;Mp[2]=1;
    Mp[3]=1;Mp[5]=1;
    Mp[6]=1;Mp[7]=1;Mp[8]=1;
    Mp[9]=1;Mp[10]=1;Mp[11]=1;
    Mp[12]=1;Mp[13]=1;
    Mp[15]=1;Mp[16]=1;
    Mp[17]=1;Mp[18]=1;
    Mp[19]=1;Mp[20]=1;Mp[21]=1;
    Mp[22]=1;Mp[23]=1;Mp[25]=1;
    Mp[26]=1;Mp[27]=1;
    Mp[28]=1;Mp[29]=1;Mp[30]=1;Mp[31]=1;
    Mp[1990]=1;Mp[1992]=1;
    Mp[1993]=1;Mp[1995]=1;
    Mp[1996]=1;Mp[1997]=1;Mp[1998]=1;
    Mp[1999]=1;Mp[2000]=1;Mp[2001]=1;
    Mp[2002]=1;Mp[2003]=1;
    Mp[2005]=1;Mp[2006]=1;
    Mp[2007]=1;Mp[2008]=1;
    Mp[2009]=1;Mp[2010]=1;
    Mp[2010]=1;Mp[2011]=1;Mp[2012]=1;Mp[2013]=1;
    Mp[2015]=1;Mp[2016]=1;Mp[2017]=1;Mp[2018]=1;
    int t;
    int y,m,d;
    cin>>t;
    while(t--){
        int sum=0;
        scanf("%d-%d-%d",&y,&m,&d);
        int f=0;
        int ans=d;
        for(int j=m;j<=12;){
                int flag=0;
                int flag2=0;
                if(Mp[y]&&Mp[j]&&Mp[ans]){
                    sum++;
                }
               // cout<<ans<<endl;
                if(y%4==0){
                    if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
                        if(ans==31){
                            flag2=1;
                            flag=1;
                        }
                    }else if(j==2){
                        if(ans==29){
                            flag2=1;
                            flag=1;
                        }
                    }else{
                        if(ans==30){
                            flag2=1;
                            flag=1;
                        }
                    }
                }else if(y%4){
                    if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
                        if(ans==31){
                            flag2=1;
                            flag=1;
                        }
                    }else if(j==2){
                        if(ans==28){
                            flag2=1;
                            flag=1;
                        }
                    }else{
                        if(ans==30){
                            flag2=1;
                            flag=1;
                        }
                    }
                }
               // cout<<m<<" "<<ans<<endl;
                if(flag==1){
                    ans=1;
                }else{
                    ans++;
                    //cout<<"A"<<endl;
                }
                if(flag2){
                    j++;
                }
        }
        d=1;
        for(int i=y+1;i<=2018;){
            for(int j=1;j<=12;){
                int flag=0;
                int flag2=0;
                if(Mp[i]&&Mp[j]&&Mp[d]){
                    sum++;//cout<<i<<"-"<<j<<"-"<<d<<" "<<sum<<endl;
                }
                if(i==2018&&j==4&&d==21){
                    f=1;
                    break;
                }

                if(i%4==0){
                    if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
                        if(d==31){
                            flag2=1;
                            flag=1;
                        }
                    }else if(j==2){
                        if(d==29){
                            flag2=1;
                            flag=1;
                        }
                    }else{
                        if(d==30){
                            flag2=1;
                            flag=1;
                        }
                    }
                }else if(i%4){
                    if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
                        if(d==31){
                            flag2=1;
                            flag=1;
                        }
                    }else if(j==2){
                        if(d==28){
                            flag2=1;
                            flag=1;
                        }
                    }else{
                        if(d==30){
                            flag2=1;
                            flag=1;
                        }
                    }
                }

                if(j==12&&d==31){
                    i++;
                }
               // cout<<flag<<endl;
                if(flag==1){
                    d=1;
                }else{
                    d++;
                    //cout<<"A"<<endl;
                }
                if(flag2){
                    j++;
                }
            }
            if(f){
                break;
            }
        }
        cout<<sum<<endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/yinghualuowu/p/8904096.html