基础计数写法,只能记录满足条件的情况个数
#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;
}