2022第十三届蓝桥杯第三题刷题统计学习心得

     首先按照题目所说小明周一至周五每天练a道题,周六和周日每天练b道题,并且是从周一开始训练,那么我们可以设置两个内循环,第一个内循环是周一至周五的练习量并记录天数,第二个内循环则是周六和周日的练习量并记录天数,注意每记录一次总练习量就需要判断是否大于所计划的练习量,当大于或等于所计划的量时,我们可以写return 0直接结束程序。因为两个内循环之间是要形成一个环,就是说从第二个内循环就要转回到第一个内循环的,因此我们可以建立一个while循环,条件只要不设置为0就可以了。

     这道题对于菜鸡的我来说属实有点难,修改了两三个致命错误才成功(逻辑错误),所以写代码时一定要注意前后的逻辑关系,特别是思维逻辑的严谨性。

以上就是这道题的学习心得啦,如果有什么问题大家可以提一提,而且大家要是有更好的方法也可以提一提啊!!!

#include 
int main()
{
  int i,j,a,b,n,sum=0,day=0;
  scanf("%d %d %d",&a,&b,&n);
  while(1)
  {
  	for(i=1;i<=5;i++)
  	{
  	 sum+=a;
	 day++;
  	 if(sum>=n)
	{
		printf("%d",day); 
		return 0;
	} 
	}
	for(j=6;j<8;j++)
	{
	sum+=b;
	day++;
	if(sum>=n)
	{
		printf("%d",day); 
		return 0;
	} 
	}
  }
}

以下为改进版,原因:以上用的方法在测试个别案例时超时,说明并非为最佳解法。

直接上代码 

#include
int main()
{
    long long int n,i,j,a,b,y,m,day=0;
    scanf("%lld%lld%lld",&a,&b,&n);
    m=n/(a*5+b*2);
    y=n%(a*5+b*2);
    while(1)
    {
    for(i=1;i<=5&&y>0;i++)
	{
		day++;
		y-=a;
	}
	if(y<=0) 
	{
		printf("%lld",day+7*m);
		return 0;
	}
	for(j=6;j<=7&&y>0;j++)
	{
		day++;
		y-=b;
	}
	if(y<=0) 
	{
	printf("%lld",day+7*m); 
	return 0;
	}
    }
}

你可能感兴趣的:(蓝桥杯)