打鱼晒网问题——计算日期差

题目:某人从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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值