NYIST山谷

這道題說是暴力枚舉的很簡單,但是依然讓我繞了半天才理解。下面介紹兩種辦法來枚舉。
第一種,找山峯和山底的個數,山谷的個數就是山峯和山底的個數的二分之一。  
#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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章