[ccf-csp]2016-04-1-折點計數
試題編號: 201604-1
試題名稱: 折點計數
時間限制: 1.0s
記憶體限制: 256.0mb
問題描述:
問題描述
給定n個整數表示乙個商店連續n天的銷售量。如果某天之前銷售量在增長,而後一天銷售量減少,則稱這一天為折點,反過來如果之前銷售量減少而後一天銷售量增長,也稱這一天為折點。其他的天都不是折點。如下圖中,第3天和第6天是折點。
給定n個整數a 1, a 2, …, a n表示銷售量,請計算出這些天總共有多少個折點。
為了減少歧義,我們給定的資料保證:在這n天中相鄰兩天的銷售量總是不同的,即a i -1≠a i。注意,如果兩天不相鄰,銷售量可能相同。
輸入格式
輸入的第一行包含乙個整數n。
第二行包含n個整數,用空格分隔,分別表示a 1, a 2, …, a n。
輸出格式
輸出乙個整數,表示折點出現的數量。
樣例輸入
75 4 1 2 3 6 4
樣例輸出
2評測用例規模與約定
所有評測用例滿足:1 ≤ n ≤ 1000,每天的銷售量是不超過10000的非負整數。
問題描述:
先輸入乙個十進位制整數n,再輸入n個正整數,求它們相鄰數之差可知是否為上公升或下降,由上公升轉下降或由下降轉上公升為折點,求折點數。
問題分析:
本題提供三種種解法,其中方法二是根據網友跟帖的建議增加的。
方法一:
需要2次計算,先計算相鄰值之差,以便知道目前趨勢(上公升或下降);然後再用相鄰的趨勢進行比較,求出折點的數量。把n個數過一遍即可,但是需要記憶之前的銷售量和差值(趨勢)。
方法二:
如果乙個點的值比左右兩個都大或都小,則為折點。
方法三:
先將資料讀入陣列,然後按照方法二進行折點判斷計數,程式邏輯簡潔易懂。只是需要付出一點空間代價。
上述方法中,後兩種方法都是推薦的。
程式說明:
方法一的程式中,使用變數(first, second, prearrow, arrow)是關鍵,沒有用陣列儲存資料,需要付出點時間代價。
方法二的程式中使用變數(left, mid, right)是關鍵,沒有用陣列儲存資料,需要付出點時間代價。這裡寫了c語言和c++語言兩個版本的程式。
方法三的程式中,使用的都是套路,就不解釋了。
我的答案:
#include
#include
using
namespace std;
intmain()
int s[n]=;
for(
int i =
1;i < n;i++
)int t =0;
for(
int i =
1;i < n;i++
) cout << t << endl;
return0;
}
CCF CSP 201604 1 折點計數
問題描述 給定n個整數表示乙個商店連續n天的銷售量。如果某天之前銷售量在增長,而後一天銷售量減少,則稱這一天為折點,反過來如果之前銷售量減少而後一天銷售量增長,也稱這一天為折點。其他的天都不是折點。如下圖中,第3天和第6天是折點。給定n個整數a1,a2,an表示銷售量,請計算出這些天總共有多少個折點...
CCF CSP 折點計數(201604 1)
問題描述 給定n個整數表示乙個商店連續n天的銷售量。如果某天之前銷售量在增長,而後一天銷售量減少,則稱這一天為折點,反過來如果之前銷售量減少而後一天銷售量增長,也稱這一天為折點。其他的天都不是折點。如下圖中,第3天和第6天是折點。給定n個整數a1,a2,an表示銷售量,請計算出這些天總共有多少個折點...
折點計數 201604 1
問題描述 給定 n個整數表示乙個商店連續 n天的銷售量。如果某天之前銷售量在增長,而後一天銷售量減少,則稱這一天為折點,反過來如果之前銷售量減少而後一天銷售量增長,也稱這一天為折點。其他的天都不是折點。如下圖中,第3天和第6天是折點。給定 n個整數 a1,a2,an表示銷售量,請計算出這些天總共有多...