1. 程式人生 > >CCF CSP認證考試歷年真題 數列分段 C語言實現

CCF CSP認證考試歷年真題 數列分段 C語言實現

試題編號: 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;
}