标签:
题目描述:中国有句俗话叫“三天打鱼,两天晒网”。某人从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