這道題說是暴力枚舉的很簡單,但是依然讓我繞了半天才理解。下面介紹兩種辦法來枚舉。
第一種,找山峯和山底的個數,山谷的個數就是山峯和山底的個數的二分之一。
#include
int main()
{
int t,i,n,h[10005],num,flag;
while(~scanf("%d",&n))
{
num=0;
flag=1; //標記上升爲1
for(i=0;i
scanf("%d",&h[i]);
for(i=0;i
{
if(flag&&h[i]>h[i+1]) //從上升到下降即爲山峯
{
num++;
flag=0;
}
else if(!flag&&h[i+1]>h[i]) //從下降到上升即爲山底
{
num++;
flag=1;
}
}
printf("%d\n",num/2);
}
}
上面這種辦法使用標記容易搞混,下面的這種辦法是直接看的大牛的代碼搞懂的,用pre爲前一個值,now爲當前值,nxt爲下一個值,直接尋找山谷。
一下是代碼,方便一下理解~~
#include
int main()
{
int t,i,j,now,pre,nxt,n,ans;
while(~scanf("%d",&n))
{
scanf("%d%d",&pre,&now);
ans=0;
if(now>pre)
pre=now;
for(i=2;i
{
scanf("%d",&nxt);
if(nxt>now&&now
{
ans++;
pre=now=nxt;
}
else if(nxt>now)
pre=now=nxt;
else
now=nxt;
}
printf("%d\n",ans);
}
return 0;
}