题目
P1317 低洼地 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
分析
对于这道题目,我们需要输出洼地的个数。
稍微一看就会知道,洼地处必有一条向下的坡和一条向上的坡
这题,有n个点,也就会有n-1条坡。
注意不能直接统计上坡的数量然后-1,
当出现连续向上的情况时,这里上坡就有5个,但实际上洼地只有1个,这样就出现了错误。
我们就需要判断洼地的后面是上坡还是下坡。
因此,直接数坡数是不太可取的,从更普遍的角度看,洼地的左右两边存在上坡和下坡。
先看到一个下坡之后,开始循环找上坡
遍历输入数据
if(出现下坡)
循环找上坡
找到了上坡,cnt++
for(i=1;i<=n;i++)
{
if(a[i]>a[i+1])//出现了下坡
{
while(a[i]>=a[i+1]&&i<n-1)//上坡还未出现,且未越界//i+1<n
{
i++;//继续往后查找
}
//循环退出,找到了上坡
if(i!=n-1) cnt++;
}
}
AC代码
#include<iostream>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int a[100010];
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int cnt=0;
for(i=1;i<n;i++)
{
if(a[i]>a[i+1])//出现了下坡
{
while(a[i]>=a[i+1]&&i<n-1)//后面还不是上坡,并且没有走到最后
{
i++;
}
if(i!=n-1) cnt++;//退出循环且没有走到最后,即找到了上坡,完成了配对,cnt+=
}
}
printf("%d",cnt);
return 0;
}