码迷,mamicode.com
首页 > 其他好文 > 详细

打鱼晒网问题

时间:2015-09-17 14:51:53      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:中国有句俗话叫“三天打鱼,两天晒网”。某人从1992年1月1日起开始“三天打鱼,两天晒网”,问:这个人在以后的某一天中是“打鱼”还是“晒网”?

解决这个题目分两步:1.距起始日期的天数,2.求余的结果  

代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h> 
 3 
 4 typedef struct D{
 5     int year;
 6     int month;
 7     int day;
 8 }Date;
 9 
10 int isleapyear(int year){
11     return (year%400==0||year%4==0&&year%100!=0);
12 }
13 
14 int getmaxday(int year,int month){
15     switch(month){
16         case 1:
17         case 3:
18         case 5:
19         case 7:
20         case 8:
21         case 10:
22         case 12:
23             return 31;
24         case 4:
25         case 6:
26         case 9:
27         case 11:
28             return 30;
29         case 2:
30             return isleapyear(year)?29:28;
31         default:
32             return -1;
33     }
34 }
35 
36 int isequal(Date date1,Date date2){
37     if(date1.year==date2.year&&date1.month==date2.month&&date1.day==date2.day){
38         return 1;
39     }
40     return 0;
41 }
42 
43 int getdiffdays(Date date1,Date date2){   //一天一天的算过去,真TM坑啊!!! 
44     int x=0;
45     while(!isequal(date1,date2)){
46         if(date1.day!=getmaxday(date1.year,date1.month)){
47             date1.day++;
48         }
49         else{
50             if(date1.month!=12){
51                 date1.month++;
52                 date1.day=1;
53             }
54             else{
55                 date1.day=date1.month=1;
56                 date1.year++;
57             }
58         }
59         x++;
60     }
61     return x;
62 }
63 
64 int main(){
65     Date date1,date2;
66     int x=0;
67     date1.year=1992;
68     date1.month=1;
69     date1.day=1;
70     printf("请输入日期:"); 
71     scanf("%d%d%d",&date2.year,&date2.month,&date2.day);
72     
73     x=getdiffdays(date1,date2);
74     printf("%d",x);
75     
76     x%=5;
77     if(x==0||x==1)
78         printf("晒网!\n");
79     else
80         printf("打鱼!\n");
81     system("pause");
82     return 0;
83     
84 } 

 

根据本题的函数可以解决sicily 1814 日期计算问题       题目描述:给定 2 个日期 yyyy.mm.dd 求两个日期间相差的天数。

代码如下:

  1 #include <iostream>
  2 using namespace std;
  3 
  4 typedef struct D{
  5     int year;
  6     int month;
  7     int day;
  8 }Date;
  9 
 10 int isleapyear(int year){
 11     return (year%400==0||year%4==0&&year%100!=0);
 12 }
 13 
 14 int getmaxday(int year,int month){
 15     switch(month){
 16         case 1:
 17         case 3:
 18         case 5:
 19         case 7:
 20         case 8:
 21         case 10:
 22         case 12:
 23             return 31;
 24         case 4:
 25         case 6:
 26         case 9:
 27         case 11:
 28             return 30;
 29         case 2:
 30             return isleapyear(year)?29:28;
 31         default:
 32             return -1;
 33     }
 34 }
 35 
 36 int isequal(Date date1,Date date2){
 37     if(date1.year==date2.year&&date1.month==date2.month&&date1.day==date2.day){
 38         return 1;
 39     }
 40     return 0;
 41 }
 42 
 43 int getdiffdays(Date date1,Date date2){   //一天一天的算过去,真TM坑啊!!! 
 44     int x=0;
 45     while(!isequal(date1,date2)){
 46         if(date1.day!=getmaxday(date1.year,date1.month)){
 47             date1.day++;
 48         }
 49         else{
 50             if(date1.month!=12){
 51                 date1.month++;
 52                 date1.day=1;
 53             }
 54             else{
 55                 date1.day=date1.month=1;
 56                 date1.year++;
 57             }
 58         }
 59         x++;
 60     }
 61     return x;
 62 }
 63 
 64 bool cmp(Date a,Date b){
 65     if(a.year>b.year){
 66         return 1;
 67     }
 68     else if(a.year==b.year&&a.month>b.month){
 69         return 1;
 70     }
 71     else if(a.year==b.year&&a.month==b.month&&a.day>b.day){
 72         return 1;
 73     }
 74     return 0;
 75 }
 76 
 77 
 78 int main(){
 79     int t;
 80     cin>>t;
 81     while(t--){
 82         char date1[10];
 83         char date2[10];
 84         cin>>date1>>date2;
 85         Date shuju1,shuju2;
 86         int temp1[10],temp2[10];
 87         for(int i=0;i<10;i++){
 88             temp1[i]=date1[i]-0;
 89             temp2[i]=date2[i]-0;
 90         }
 91         
 92         shuju1.year = temp1[0]*1000+temp1[1]*100+temp1[2]*10+temp1[3]; 
 93         shuju1.month= temp1[5]*10+temp1[6]; 
 94         shuju1.day  = temp1[8]*10+temp1[9]; 
 95         shuju2.year = temp2[0]*1000+temp2[1]*100+temp2[2]*10+temp2[3]; 
 96         shuju2.month= temp2[5]*10+temp2[6]; 
 97         shuju2.day  = temp2[8]*10+temp2[9];
 98         if(cmp(shuju1,shuju2)){  //这样保证第二个日期大于第一个日期 
 99             Date temp=shuju1;
100             shuju1=shuju2;
101             shuju2=temp;
102         }
103         
104         cout<<getdiffdays(shuju1,shuju2)<<endl; 
105     
106     }    
107     return 0;
108 }
109  

 

打鱼晒网问题

标签:

原文地址:http://www.cnblogs.com/liugl7/p/4816119.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!