问题标题: 酷町堂:1034 文理综合周考 找错误

0
0
已解决
郑怡翔
郑怡翔
初级天翼
初级天翼
#include<iostream>
using namespace std;
int main()
{
    int n,i;
    cin>>n;
    int a[55],b[55],sum=0;
    for(i=1;i<=n;i++)
    cin>>a[i]>>b[i];
    for(i=1;i<=n;i++)
    {
        if(a[i]>=220 && b[i]>=230)
        sum++;
        else
        {
            sum=0;
            continue;
        }

    }
    cout<<sum;
    return 0;
}

66分的代码,找错!找错!找错!


2
已采纳
方亦欧
方亦欧
新手光能
新手光能

这一题,你的错误出在没有对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。

望采纳!

 

0
夏子健
夏子健
初级光能
初级光能

你的程序错误在于你没有定义一个max数组来记录当前长度,最终得出最大值;

因为没有这个数组,所以你的sum就不一定是最大值了;

望采纳,谢谢!

0
蒋智航
蒋智航
高级天翼
高级天翼

你要

测试点#5与测试点#6 的数据吗?

我有。你的       超时了

0
杨陈卓
杨陈卓
新手天翼
新手天翼

定义整型变量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;

0
0
王子轩
王子轩
新手光能
新手光能

 

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;

 

}

我要回答