关于C入门连续问题的思考(新人的第一次尝试)

基础计数写法,只能记录满足条件的情况个数

​
#include <stdio.h>

int main()

{
    int n;
    scanf("%d", &n);
    int a, b;
    int count=0;
    for (int i = 1; i <= n; i++)
    {
         scanf("%d %d", &a, &b);

         if (a >= 90 && a <= 140 && b >= 60 && b <= 90)

         {
             count++;
         }

    }

    printf("%d",count);

    return 0;
}

​

此题要求写出连续正常的最长小时数,故以上代码并不能完全满足题意。需引入此连续问题的核心算法代码:

​
​
    if (a >= 90 && a <= 140 && b >= 60 && b <= 90)
    {   currentCount++;

        if (currentCount > maxCount)
        {
            maxCount = currentCount;
        }

    }

    else
    {
        currentCount = 0;
    }


​

currentCount负责记录当下(a,b)是否满足if语句,满足则加一进入下一句if赋值更新maxCount,不满足则又刷新为零重新进行筛选。以样例为举,第一条(100,80)满足第一条if语句,currentCount加为1,且1>0,满足第二条if语句,maxCount被赋值为1,再次for循环(以下第一条if称为1if,第二条if称为2if);第二条(90,50)不满足1if,直接跳到else,(100,80)做的一切就作废了,maxCount回到解放前,变为初值0;第三条(120,60)如第一条(100,80),使maxCount变为1;同理第四条(140,90)满足1if、2if,maxCount更新为2。经过第四条时i==4,n=4,故完成任务,跳出for循环,以maxCount=2输出,得到最终结果。

​
#include <stdio.h>

int main() 
{
    int n;
    scanf("%d", &n);
    int a, b;
    int currentCount = 0; // 当前连续正常的小时数
    int maxCount = 0;    // 最长连续正常的小时数
    for (int i = 1; i <= n; i++)

    {
         scanf("%d %d", &a, &b);
         if (a >= 90 && a <= 140 && b >= 60 && b <= 90)  //1

         {    currentCount++;

              if (currentCount > maxCount)  //2

              {
                   maxCount = currentCount;
              }
         }

         else

         {
              currentCount = 0;
         }
     }
    printf("%d", maxCount);
    return 0;
}

​

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值