题目:某人从1992年1月1日就开始三天打鱼,两天晒网,问这个人在以后的某一天中是打🐟还是晒网?
输入:输入年月日,中间用空格隔开;也可以先输入年,按回车后输入月,再按回车后输入日。
1992 12 5
日期差为:339天
晒网!
自己写的代码
#include<stdio.h>
#include<stdlib.h>
int days(int year,int month,int day)
{
int sumDays=day,i,j,k;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
for(i=1992;i<year;++i)
for(j=1;j<=12;++j)
{
if((i%4==0&&i%100!=0)||i%400==0)
sumDays+=b[j-1];
else
sumDays+=a[j-1];
}
for(k=1;k<month;++k)
{
if((i%4==0&&i%100!=0)||i%400==0)
sumDays+=b[k-1];
else
sumDays+=a[k-1];
}
return sumDays;
}
int main(int argc, char** argv)
{
int year,month,day,totalDays=0;
scanf("%d %d %d",&year,&month,&day);//两种输入都可行,空格或回车
totalDays=days(year,month,day);
printf("日期差为:%d天\n",totalDays-1);
if(totalDays%5==0||totalDays%5==4)
printf("晒网!\n");
else
printf("打鱼!\n");
system("pause");
return 0;
}
学习代码
#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))
//如果要查询的日期不等于该月的最大天数
{
date1.day++;
}
else
{
if(date1.month!=12)
{
date1.month++;
date1.day=1;
}
else
{
date1.day=date1.month=1;
date1.year++;
}
}
X++;
}
return X;
}
int main(int argc, char** argv)
{
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;
if(X==0||X==4)
printf("晒网!\n");
else
printf("打鱼!\n");
system("pause");
return 0;
}
学习要点
1.打鱼晒网应该从1992年1月1日开始算,学习代码是从1月2日开始算起,所以将原有的X=X%5 改为 X=(++X)%5
2.日期类型的结构体
3.return IsLeapYear(year)?29:28;