CCF CSP認證考試歷年真題 數列分段 C語言實現
阿新 • • 發佈:2018-12-31
試題編號: 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。 提交
確認:
以下必須全部滿足才能提交:
我的程式沒有使用package語句來定義包的資訊。(如果定義了將無法評測) 我的程式的主類名稱是Main,主類的定義是public class Main。我的程式執行的入口是主類Main中的main函式,定義為public static void main(String[] args)。 我的程式是從標準輸入(System.in)中讀入資料的(使用Scanner等類來處理
System.in的輸入視為滿足條件),結果是輸出到標準輸出(System.out)的。 我的程式中沒有“請輸入n”之類的輸入輸出提示,也沒有輸出中間的結果,所有的輸出內容都與題設中的輸出格式相對應。我的輸出格式(包括換行和大小寫等)與題
設中輸出格式的要求相符。
分析:
很簡單的一道題,不過這道題其實可以不用建立一個整形陣列也能判斷,再簡單的程式也要養成對記憶體優化的習慣。
程式碼在此:
#include<stdio.h> int main() { int n; int s = 0; scanf("%d", &n); int last; scanf("%d", &last); for(int i = 1; i < n; i++) { int temp; scanf("%d", &temp); if(temp == last){ continue; } else { last = temp; s ++; } } s ++; printf("%d", s); return 0; }