(本人本题完成于2016-7-22)
题目:花匠-题目
以下是本人代码:
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int n,h[100010]={0};
int p,ans=0,maxans=0; //p代表前面的数列的状态,p=0时代表数列在递增,p=1时代表数列在递减
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&h[i]);
p=0;
for(int i=1;i<n;i++)
{
if (!p&&h[i]>h[i+1]) {ans++;p=1-p;}
if (p&&h[i]<h[i+1]) {ans++;p=1-p;} //当状态改变时,增加转折点的数量
} //找转折点
maxans=ans;
ans=0;
p=1;
for(int i=1;i<n;i++)
{
if (!p&&h[i]>h[i+1]) {ans++;p=1-p;}
if (p&&h[i]<h[i+1]) {ans++;p=1-p;}
} //改变初始状态再找一遍
maxans=max(ans,maxans);
printf("%d",maxans+1); //注意:答案还要再加上1
return 0;
}
本文介绍了一种通过编程计算给定序列中转折点数量的方法,重点在于如何判断和统计序列从递增到递减或从递减到递增的变化次数。
318

被折叠的 条评论
为什么被折叠?



