CCF-CSP 數列分段與折點計數
201509-1 數列分段
問題描述
試題編號:201509-1 試題名稱:數列分段 時間限制:1.0s 記憶體限制:256.0MB 問題描述 給定一個整數數列,數列中連續相同的最長整數序列算成一段,問數列中共有多少段? 輸入格式 輸入的第一行包含一個整數n,表示數列中整數的個數。 第二行包含n個整數a1, a2, …, an,表示給定的數列,相鄰的整數之間用一個空格分隔。 輸出格式 輸出一個整數,表示給定的數列有多個段。 樣例輸入 8 8 8 8 0 12 12 8 0 樣例輸出 5 樣例說明 8 8 8是第一段,0是第二段,12 12是第三段,倒數第二個整數8是第四段,最後一個0是第五段。 評測用例規模與約定 1 ≤ n ≤ 1000,0 ≤ ai ≤ 1000。
題解
這個題目非常簡單,初始化段的計數為1,因為至少有一個段,然後遍歷陣列,出現不同的數字意味著又有新的段,所以段的計數加1,否則就是同一個段,直接檢查下一個數。
n = int(input())# 整數的個數 lst = list(map(int, input().split()))# 給定的數列 count = 1# 計數 for i in range(n - 1): if lst[i] != lst[i + 1]:# 每次不同就加1 count += 1 print(count)# 輸出結果
201604-1 折點計數
問題描述
試題編號:201604-1 試題名稱:折點計數 時間限制:1.0s 記憶體限制:256.0MB 問題描述 給定n個整數表示一個商店連續n天的銷售量。如果某天之前銷售量在增長,而後一天銷售量減少,則稱這一天為折點,反過來如果之前銷售量減少而後一天銷售量增長,也稱這一天為折點。其他的天都不是折點。如下圖中,第3天和第6天是折點。
給定n個整數a1, a2, …, an表示銷售量,請計算出這些天總共有多少個折點。 為了減少歧義,我們給定的資料保證:在這n天中相鄰兩天的銷售量總是不同的,即ai-1≠ai。注意,如果兩天不相鄰,銷售量可能相同。 輸入格式 輸入的第一行包含一個整數n。 第二行包含n個整數,用空格分隔,分別表示a1, a2, …, an。 輸出格式 輸出一個整數,表示折點出現的數量。 樣例輸入 7 5 4 1 2 3 6 4 樣例輸出 2 評測用例規模與約定 所有評測用例滿足:1 ≤ n ≤ 1000,每天的銷售量是不超過10000的非負整數。
題解
這個題目也非常簡單,由題目可知,這點的特點就是左右兩個點要麼都大於或者小於這個數,於是依據這個條件從第二個點開始,依次檢查到倒數第二個點即可。
n = int(input())# 整數個數 lst = list(map(int, input().split()))# 整數列表 count = 0# 計數變數 for i in range(1, n - 1):# 遍歷陣列 if (lst[i] < lst[i - 1] and lst[i] < lst[i + 1]) or (lst[i] > lst[i - 1] and lst[i] > lst[i + 1]):# 計數 count += 1 print(count)# 輸出結果