試題編號: | 201604-1 |
試題名稱: | 折點計數 |
時間限制: | 1.0s |
內存限制: | 256.0MB |
問題描述: |
問題描述 給定n個整數表示一個商店連續n天的銷售量。如果某天之前銷售量在增長,而後一天銷售量減少,則稱這一天爲折點,反過來如果之前銷售量減少而後一天銷售量增長,也稱這一天爲折點。其他的天都不是折點。如下圖中,第3天和第6天是折點。 輸入格式 輸入的第一行包含一個整數n。 輸出格式 輸出一個整數,表示折點出現的數量。 樣例輸入 7 樣例輸出 2 評測用例規模與約定 所有評測用例滿足:1 ≤ n ≤ 1000,每天的銷售量是不超過10000的非負整數。 |
解題思路:
對某一天的銷售量,將其分別與前一天和後一天的銷售量做差,若兩次差值異號,即一負一正或一正一負,則說明該點爲折點。
C++實現:
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int first,second,third;
cin>>first>>second; //輸入第一、二個銷售量
int count=0; //折點計數
for(int i=2;i<n;i++)
{
cin>>third; //輸入第三個銷售量
int before,after;
before=second-first; //第2個銷售量-第1個銷售量
after=third-second; //第3個銷售量-第2個銷售量
if((before>0&&after<0)||(before<0&&after>0)) //若兩個值異號(也可寫兩者相乘<0)
count++; //折點數+1
first=second; //開始判斷下一個點
second=third;
}
cout<<count<<endl;
return 0;
}