中国有句俗话“三天打鱼两天晒网”。某人从1992年1月1日起开始“三天打鱼两天晒网”,问:这个人在以后某一天中是“打鱼”还是“晒网”?
/*描述:"三天打鱼,两天晒网"解答 */
#include <stdio.h>
#include <stdlib.h>
//日期结构体
typedef struct D
{
int year;
int month;
int day;
}Date;
//判断是否是闰年
int IsLeapYear(int year)
{
return (year % 400 == 0 || year % 4 == 0 && year % 100 != 0);
}
//获得某年某月的最大天数
int GetMaxDay(int year,int month)
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return IsLeapYear(year)?29:28;
default:
return -1;
}
}
//两个日期是否相等
int IsEqual(Date date1,Date date2)
{
if(date1.year == date2.year && date1.month == date2.month && date1.day == date2.day)
return 1;
return 0;
}
//计算日期之间的天数差(一天一天加,直到相等,算出加的天数)
int GetdiffDays(Date date1,Date date2)
{
int X = 0;
while(!IsEqual(date1,date2))
{
if(date1.day != GetMaxDay(date1.year,date1.month))
{
//如果要查询的日期不等于该月的最大天数,加到最大天数才进行下面的月份进1或年份进1
date1.day++;
}
else
{
if(date1.month != 12)
{
date1.month++;
date1.day = 1;
}
else
{
date1.day = date1.month = 1;
date1.year++;
}
}
X++;
}
return X;
}
void main()
{
Date date1,date2;
int X = 0;
date1.year = 1992;
date1.month = 1;
date1.day = 1;
printf("请输入日期:");
scanf("%d%d%d",&date2.year,&date2.month,&date2.day);
X = GetdiffDays(date1,date2);
printf("日期差为:%d 天\n",X);
X = X % 5; //天数对5取余
if(X == 0 || X == 4) //余数为0、4,则为晒网
printf("晒网!\n");
else
printf("打鱼!\n");
system("pause");
}