跑步锻炼(蓝桥杯)

这道题我一天写了两次,第一次只想快点写出来,一个字,干,

结果用switch写出来一个大块头

代码如下

#include<stdio.h>
int run(int i)
{
	if((i%400==0||(i%4==0&&i%100!=0))) return 1;
	else return 0;
}
int main()
{
	int weeknum=0,monthnum=0,i,j,day=0,weekmonth=0;
	for(i=2000;i<2020;i++)
	for(j=1;j<=12;j++)
	{
		switch(j)
		{
			case 1:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 2:if((day-2)%7==0) weekmonth+=1;if(run(i)) day+=29; else day+=28;monthnum+=1;break;
			case 3:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 4:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
			case 5:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 6:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
			case 7:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 8:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 9:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
			case 10:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 11:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
			case 12:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
		}
	}
	for(j=1;j<10;j++)
	{
		switch(j)
		{
			case 1:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 2:if((day-2)%7==0) weekmonth+=1;if(run(i)) day+=29; else day+=28;monthnum+=1;break;
			case 3:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 4:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
			case 5:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 6:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
			case 7:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 8:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
			case 9:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
		}
	}
	day+=1;monthnum+=1;
	weeknum=(day-3)/7+1;
	int all=day+weeknum+monthnum-weekmonth;	
	printf("%d",all);
	return 0;
}

 代码的啰嗦程度不敢恭维,

还好结果对了

没办法,程序太丑,自己都嫌弃,所以我马上又写了一次,

这次先理了理思路再写的,看着就简洁多了。

第二次的代码如下

#include<stdio.h>
int run(int i)
{
	if((i%400==0||(i%4==0&&i%100!=0))) return 1;
	else return 0;
}
int main()
{
	int month[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};
	int i,j,day=0,monthnum=0,weeknum=0,weekmonth=0;
	for(i=2000;i<=2020;i++)
	{
		if(run(i)) month[2]=29;
		else month[2]=28;
		for(j=1;j<=12;j++)
		{
			if(i==2020&&j==10) break;
			if((day-2)%7==0) weekmonth+=1;
			monthnum+=1; day+=month[j];
		}
	}
	weeknum=(day-3)/7+1;
	int all=day+1+weeknum+monthnum+1-weekmonth;	
	printf("%d",all);
	return 0;
 } 

代码直接少了一半多,不错不错。

答案也没问题 

改 ~~真理啊! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Koi279

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值