实例9 打鱼晒网问题

中国有句俗话“三天打鱼两天晒网”。某人从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");
  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值