三天打鱼两天晒网

题目描述:

中国有句俗语叫“三天打鱼两天晒网”。某人从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     

 

posted on 2012-12-15 21:10  mycapple  阅读(951)  评论(2编辑  收藏  举报

导航