Hzu挑战自我


私信TA

用户名:gxhzxyjsj

访问量:98812

签 名:

2024终究会过去,期待2025!

等  级
排  名 8
经  验 27865
参赛次数 67
文章发表 157
年  龄 0
在职情况 教师
学  校 贺州学院
专  业 软件工程

  自我简介:

弱鸡一个,继续努力!

解题思路:

    程序写得很复杂,没有认真去看能否简化代码,按照自己的思路一步一步就写下去,然后测试,然后提交,然后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 人评分

  评论区

  • «
  • »