链接:https://www.nowcoder.com/acm/contest/115/B
来源:牛客网
题目描述
给出一个出生日期,比如:1999-09-09,
问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?
问:从出生那一天开始起,到今天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; }