链接:
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
题意:给出一个出生日期,比如:1999-09-09,
问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?
//既然指明年份范围是1990-2018,那么可以先打表(从1990-01-01到现在不含4的天数),最后给出到2018-04-21不含4的天数与到输入日期不含4的天数的差值即可。
#include<bits/stdc++.h>
using namespace std;
int a[2024][15][35];
int main()
{
int t;
int i,j,k;
int y,m,d;
int cnt=1;
int flag;
for(i=1990;i<=2018;i++)
{
if((i%4==0&&i%100!=0)||i%400==0) flag=1;
else flag=0;
for(j=1;j<=12;j++)
{
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
{
for(k=1;k<=31;k++)
{
if(k%10==4||j%10==4||i%10==4)
a[i][j][k]=cnt;
else
a[i][j][k]=cnt++;
}
}
else if(j==4||j==6||j==9||j==11)
{
for(k=1;k<=30;k++)
{
if(k%10==4||j%10==4||i%10==4)
a[i][j][k]=cnt;
else
a[i][j][k]=cnt++;
}
}
else
{
if(flag)
{
for(k=1;k<=29;k++)
{
if(k%10==4||j%10==4||i%10==4)
a[i][j][k]=cnt;
else
a[i][j][k]=cnt++;
}
}
else
{
for(k=1;k<=28;k++)
{
if(k%10==4||j%10==4||i%10==4)
a[i][j][k]=cnt;
else
a[i][j][k]=cnt++;
}
}
}
}
}
cin>>t;
for(i=0;i<t;i++)
{
scanf("%d-%d-%d",&y,&m,&d);
printf("%d\n",a[2018][4][21]-a[y][m][d]);
}
return 0;
}