解题思路:
程序写得很复杂,没有认真去看能否简化代码,按照自己的思路一步一步就写下去,然后测试,然后提交,然后AC。
注意事项:
分成两种情况考虑:
(1)如果当前日期大于2011/11/11,则累加求和,求当前日期与2011/11/11相差的天数,得到一个正数。
(2)如果当前日期小于2011/11/11,则累减求差,求当前日期与2011/11/11相差的天数,得到一个负数。
参考代码:
#include<iostream> using namespace std; typedef struct { int yy,mm,dd; }Date; int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; bool cmp(Date d1,Date d2) //判断日期d1是否大于日期d2 { if(d1.yy!=d2.yy) return d1.yy>d2.yy; if(d1.mm!=d2.mm) return d1.mm>d2.mm; return d1.dd>d2.dd; } bool leap(int year) //判断是否是闰年 { if(year%4==0 && year%100!=0 || year%400==0) return true; else return false; } void output(int s) //根据s的值得输出星期 { switch(s) { case 0: cout<<5; break; case 1: cout<<6; break; case 2: cout<<7; break; case 3: cout<<1; break; case 4: cout<<2; break; case 5: cout<<3; break; case 6: cout<<4; break; } } int main() { Date myd,myd0={2011,11,11}; int sum=0; cin>>myd.yy>>myd.mm>>myd.dd; if(cmp(myd,myd0)) //日期大于2011/11/11的情况 { int year; for(year=myd0.yy+1;year<myd.yy;year++) { if(leap(year)) sum=sum+366; else sum=sum+365; } if(myd.yy-myd0.yy==0) //年份相同,即2011年 { if(myd.mm-myd0.mm==0) //月份相同 ,即11月 sum=sum+myd.dd-myd0.dd; else //月份不同,肯定是12月 sum=sum+(month[myd0.mm]-myd0.dd)+myd.dd; } else //年份不同,2011年以后的年份 { sum=sum+(month[myd0.mm]-myd0.dd); //本月剩余的天数 for(int i=myd0.mm+1;i<=12;i++) //下个月到12月的天数 sum=sum+month[i]; for(int i=1;i<myd.mm;i++) //下一年1月到当前月前一个月的天数 sum=sum+month[i]; if(myd.mm>2 && leap(myd.yy)) //当前月大于2,而且当前月是闰年,天数加1 sum++; sum=sum+myd.dd; //到当前日的天数 } } else //日期小于2011/11/11的情况 { int year; for(year=myd0.yy-1;year>myd.yy;year--) { if(leap(year)) sum=sum-366; else sum=sum-365; } if(myd.yy-myd0.yy==0) //年份相同,即2011年 { if(myd.mm-myd0.mm==0) //月份相同 ,即11月 sum=sum-(myd0.dd-myd.dd); else //年份相同,但是月份不同情况 { sum=sum-myd0.dd; //2011年11月的天数 for(int i=myd.mm+1;i<myd0.mm;i++) //2011年其他月的天数 sum=sum-month[i]; sum=sum-(month[myd.mm]-myd.dd); //当前月到月末的天数 if(myd.mm<=2 && leap(myd.yy)) //当前月小于2,而且是闰年 sum--; } } else //年份不同,即2011年以前 { sum=sum-(365-(30-11+31)); //2011年1月1日到2011年11月11日的天数 for(int i=myd.mm+1;i<=12;i++) //当前月的下一个月到12月的天数 sum=sum-month[i]; sum=sum-(month[myd.mm]-myd.dd); //当前月到月末的天数 if(myd.mm<=2 && leap(myd.yy)) //当前月小于2,而且是闰年 sum--; } } output( (sum%7+7) %7 ); return 0; }
0.0分
1 人评分
简单的a+b (C语言代码)浏览:827 |
C语言训练-列出最简真分数序列* (C语言代码)浏览:543 |
C语言训练-素数问题 (C语言代码)浏览:1697 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:644 |
校门外的树 (C语言代码)浏览:988 |
WU-陶陶摘苹果2 (C++代码)浏览:1018 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)from DQM浏览:773 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:585 |
核桃的数量 (C语言代码)浏览:726 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:513 |