三天打鱼两天晒网
题目描述:
中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
Sample Input:
Enter year/month/day:1991 10 25
Enter year/month/day:1992 10 25
Enter year/month/day:2011 12 10
Sample Output:
He was fishing at day.
He was sleeping at day.
He was sleeping at day
问题分析与算法设计
根据题意可以将解题过程分为三步:
1)计算从1990年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若余数为1,2,3,则他是在“打鱼”
否则 是在“晒网”
在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。
闰年的方法可以用伪语句描述如下:
如果 ((年能被4除尽 且 不能被100除尽)或 能被400除尽) 则该年是闰年;
否则 不是闰年。
1 #include<stdio.h> 2 #include<stdlib.h> 3 int count_day(int year, int month, int day) 4 { 5 int count=0; 6 int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 7 int i; 8 if(year%4==0&&year%100!=0||year%400==0) 9 mon[1]=29; 10 for(i=0;i<month-1;i++) 11 { 12 count+=mon[i]; 13 } 14 return count+day; 15 } 16 int main() 17 { 18 int i,count=0; 19 int y,m,d; 20 printf("Enter year/month/day:\n"); 21 scanf("%d %d %d",&y,&m,&d); 22 for(i=1990;i<y;i++) 23 { 24 count+=count_day(i,12,31); 25 } 26 count+=count_day(y,m,d); 27 if(count%5<4) 28 printf("He was fishing at day\n"); 29 else 30 printf("He was sleeping at day\n"); 31 system("pause"); 32 return 0; 33 } 34 35