新手光能
这一题,你的错误出在没有对sum变量的值进行保存。这道题求的应该是众多sum值中的一个最大值,而你计算出来的sum值,并没有将其保存,导致在你计算出最大值后,碰到一对不满足条件的数,结果便又将其赋为了0。你最后输出的值,其实是算到最后一对数时sum的值,它只是所有保持综合学习合格周数中的一个,甚至在最后一对数不满足条件时,sum的值还会是0。
而解决方法,就是设定一个max变量,在不满足综合学习合格的情况下判断sum的值是否大于它,如果是,便将其记录下来。这样算出的才是所有组合中的最大值(max初值赋0)。
举个例子,假如输入的值是这样:
220 230
220 230
220 230
210 230
220 230
220 230
220 230
220 230
210 230
按照你的思路:
220 230 满足条件,sum=1;
220 230 满足条件,sum=2;
220 230 满足条件,sum=3;
210 230 不满足条件,sum=0;
220 230 满足条件,sum=1;
220 230 满足条件,sum=2;
220 230 满足条件,sum=3;
220 230 满足条件,sum=4;
210 230 不满足条件,sum=0。
显然,最后输出sum=0,是不对的。
而引入变量max存储最大值后:
220 230 满足条件,sum=1,max=0;
220 230 满足条件,sum=2,max=0;
220 230 满足条件,sum=3,max=0;
210 230 不满足条件,判断sum是否大于max。sum=0,max=3。
220 230 满足条件,sum=1,max=3;
220 230 满足条件,sum=2,max=3;
220 230 满足条件,sum=3,max=3;
220 230 满足条件,sum=4,max=3;
210 230 不满足条件,判断sum是否大于max。sum=0,max=4。
最后输出max为4,得到正确答案。
另外,你的程序中使用的continue是毫无作用的,因为sum=0已经是最后一条语句,无论你加不加它,循环都会进行下一次。所以在这里它多余了。
你的程序应该这样改:
for(i=1;i<=n;i++)
{
if(a[i]>=220 && b[i]>=230)
sum++;
else
{
if(max<sum)
max=sum;
sum=0;
}
}
记得max初值赋0,最后输出max。
望采纳!
初级光能
你的程序错误在于你没有定义一个max数组来记录当前长度,最终得出最大值;
因为没有这个数组,所以你的sum就不一定是最大值了;
望采纳,谢谢!
新手天翼
定义整型变量n,a[53],b[53],k=0,ans=0;
输入n;
核心代码
for(int i=0;i<=n-1;i++)
{
cin>>a[i];
cin>>b[i];
}
for(int j=0;j<=n-1;j++)
{
if((a[j]>=220&&b[j]>=230)&&(a[j]<=300&&b[j]<=300))
{
ans++;
if(ans>k) k=ans;
}
else ans=0;
}
输出k;