三天打鱼两天晒网问题
中国有句老话,“三天打鱼两天晒网”。假设渔民老张从1990年1月1日开始“三天打鱼两天晒网”,那么请你帮助推算出在以后某一天中,老张是在“打鱼”,还是在“晒网”。
输入:
第一行是测试的组数。以后每一行是一组要测试的时间,有三个数据,分为表示为年、月、日。
输出:
根据输入的日期,打印出相应的情况(打鱼还是晒网),具体格式见测试用例。
重点是找出 两个日期之间有多少天
1 // wanmei_test2.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 6 #include <stdio.h> 7 #define MAX 100 8 #define leap(y) (y%4==0 && y%100!=0 || y%400==0) //也可以用函数 9 10 struct date 11 { 12 int y; 13 int m; 14 int d; 15 }; 16 long days(struct date d1,struct date d2)//d1 是起始日期,d2 是终止日期 17 { 18 int mon[2][13]= {{0,31,28,31,30,31,30,31,31,30,31,30,31}, 19 {0,31,29,31,30,31,30,31,31,30,31,30,31}}; 20 int i; long td=0; 21 for(i=d1.y;i<d2.y;i++) 22 td+=leap(i)?366:365; 23 for(i=1;i<d1.m;i++) 24 td-=mon[leap(d1.y)][i]; 25 td-=d1.d-1; 26 for(i=1;i<d2.m;i++) 27 td+=mon[leap(d2.y)][i]; 28 td+=d2.d-1; 29 return td; //td就是两个日期之间的天数 30 } 31 32 int main() 33 { 34 struct date now[MAX],start={1990,1,1}; 35 int n,i,day; 36 scanf("%d",&n); 37 for(i=0;i<n;++i) 38 { 39 scanf("%d%d%d",&now[i].y,&now[i].m,&now[i].d); 40 } 41 for(i=0;i<n;++i) 42 { 43 day=days(start,now[i]); 44 printf("总天数为%d\n",day); 45 if(day%5<3) 46 printf("He was fishing on %d %d %d\n",now[i].y,now[i].m,now[i].d); 47 else 48 printf("He was basking on %d %d %d\n",now[i].y,now[i].m,now[i].d); 49 } 50 return 0; 51 }