首先按照题目所说小明周一至周五每天练a道题,周六和周日每天练b道题,并且是从周一开始训练,那么我们可以设置两个内循环,第一个内循环是周一至周五的练习量并记录天数,第二个内循环则是周六和周日的练习量并记录天数,注意每记录一次总练习量就需要判断是否大于所计划的练习量,当大于或等于所计划的量时,我们可以写return 0直接结束程序。因为两个内循环之间是要形成一个环,就是说从第二个内循环就要转回到第一个内循环的,因此我们可以建立一个while循环,条件只要不设置为0就可以了。
这道题对于菜鸡的我来说属实有点难,修改了两三个致命错误才成功(逻辑错误),所以写代码时一定要注意前后的逻辑关系,特别是思维逻辑的严谨性。
以上就是这道题的学习心得啦,如果有什么问题大家可以提一提,而且大家要是有更好的方法也可以提一提啊!!!
#include <stdio.h>
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<stdio.h>
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;
}
}
}