+ -
当前位置:首页 → 问答吧 → 打鱼还是晒网

打鱼还是晒网

时间:2010-08-19

来源:互联网

中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。

*问题分析与算法设计
根据题意可以将解题过程分为三步:
1)计算从1990年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若余数为1,2,3,则他是在“打鱼”
否则 是在“晒网”
在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。
闰年的方法可以用伪语句描述如下:
如果 ((年能被4除尽 且 不能被100除尽)或 能被400除尽) 则该年是闰年;
否则 不是闰年。
  1. #include <stdio.h>

  2. struct date
  3. {
  4.     int year;
  5.     int month;
  6.     int day;
  7. };

  8. int days(struct date day);

  9. int main(void)
  10. {
  11.     struct date today,term;
  12.     int yearday, year, day;
  13.     printf("Enter year/month/day");
  14.     scanf("%d%d%d", &today.year,&today.month,&today.day);
  15.     term.month=12;
  16.     term.day=31;

  17.     for(yearday=0,year=1990; year<today.year; year++)
  18.     {
  19.         term.year = year;
  20.         yearday +=  days(term);
  21.     }

  22.     yearday += days(today);
  23.     day      = yearday%5;

  24.     if(day>0 && day<4)
  25.         printf("he was fishing at that day\n");
  26.     else
  27.         printf("he was sleeping at that day.\n");
  28. }

  29. int days(struct date day)
  30. {
  31.     static int day_tab[2][13]=
  32.     {
  33.         {0,31,28,31,30,31,30,31,31,30,31,30,31,},
  34.         {0,31,29,31,30,31,30,31,31,30,31,30,31,},
  35.     };

  36.     int i,lp;
  37.     lp =  ((day.year%4 == 0) && (day.year%100!= 0))||(day.year%400==0);

  38.     for(i=1;i<day.month; ++i){
  39.         day.day += day_tab[lp][i];
  40.     }

  41.     return day.day;
  42. }
复制代码

作者: sohu2000000   发布时间: 2010-08-19

可以直接用time系列函数算天数

作者: hellioncu   发布时间: 2010-08-19

直接填好后mktime就行了吧……

作者: daybreakcx   发布时间: 2010-08-19

热门下载

更多