题目描述
最近专家培育出一种七彩玫瑰,由于数量稀少,需要提前预订,如果本月的某一天预订,可以在下个月的同一天或之前的两天送货。如果下个月没有本月预订的这一天,默认下个月的最后一天或之前的两天送货。小浩同学花大价钱为女票订了一束七彩玫瑰。女票能在生日那天收到小浩的七彩玫瑰吗?
输入
第一行是一个整数n(0<n<100),表示有n组测试数据。
每组数据占一行,由两个日期组成,用空格隔开,第一个日期表示订花日期,第二表日期表示女票生日。
输出
对应每组测试数据,判断第二个日期是否是在送花日期范围内,如果是输出Yes,不是输出No,每个输出占一行。
样例输入
3
2018-01-15 2018-02-14
2017-10-31 2017-10-01
2000-12-29 2001-01-27
样例输出
Yes
No
Yes
#include<stdio.h>
int panduan(int year)
{
if(year%400==0||year%4==0&&year%100!=0)
return 1;
else
return 0;
}
int youwu(int year,int month,int day)
{
int k;
k=panduan(year);
if(month!=7&&month!=12&&day==31)
return 0;
else if(month==1&&day==30)
return 0;
else if(month==1&&day==29&&k==0)
return 0;
else
return 1;
}
int benyue(int year,int month,int day)
{
int i,k,a[13];
k=panduan(year);
for(i=1;i<=12;i++)
{
if(i==4||i==6||i==9||i==11)
a[i]=30;
else if(i==2&&k==0)
a[i]=28;
else if(i==2&&k==1)
a[i]=29;
else
a[i]=31;
}
return a[month];
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int year,month,day,a,b,c,i,k,j,flag=0;
scanf("%d-%d-%d",&year,&month,&day);
scanf("%d-%d-%d",&a,&b,&c);
j=youwu(year,month,day);
if(j==0)
{
k=benyue(year,month+1,day);
for(day=k;day>=k-2;day--)
{
if(a==year&&b==month+1&&c==day)
{
flag=1;
break;
}
else
flag=0;
}
}
else
{
k=benyue(year,month,day);
month++;
if(month>12)
{
year++;
month=1;
}
for(i=1;i<=3;i++)
{
if(a==year&&b==month&&c==day)
{
flag=1;
break;
}
else
flag=0;
day--;
if(day==0)
{
month--;
day=k;
}
if(month==0)
{
year--;
month=12;
}
}
}
if(flag)
printf("Yes\n");
else
printf("No\n");
}
}