藍橋 ALGO-79 刪除數組零元素

刪除數組零元素

資源限制
時間限制:1.0s 內存限制:512.0MB
從鍵盤讀入n個整數放入數組中,編寫函數CompactIntegers,刪除數組中所有值爲0的元素,其後元素向數組首端移動。注意,CompactIntegers函數需要接受數組及其元素個數作爲參數,函數返回值應爲刪除操作執行後數組的新元素個數。輸出刪除後數組中元素的個數並依次輸出數組元素。
樣例輸入: (輸入格式說明:5爲輸入數據的個數,3 4 0 0 2 是以空格隔開的5個整數)
5
3 4 0 0 2
樣例輸出:(輸出格式說明:3爲非零數據的個數,3 4 2 是以空格隔開的3個非零整數)
3
3 4 2
樣例輸入:
7
0 0 7 0 0 9 0
樣例輸出:
2
7 9
樣例輸入:
3
0 0 0
樣例輸出:
0

/*
	Name: 藍橋杯:刪除數組零元素
	Copyright: 拔劍四顧心茫然 
	Author: 拔劍四顧心茫然 
	Date: 20/04/15 19:45
	Description: dev-cpp 5.11 
*/
#include<iostream>
#include<string.h>
using namespace std;

int CompactIntegers(int a[], int cnt)
{
	int n = cnt;
	for(int i=0;i<n;i++)
	{
		if(a[i]==0)
		{
			for(int j=i;j<n;j++)
				a[j] = a[j+1];
			cnt -= 1;
			i -= 1;//由於元素整體向前移動,有可能零元素在左移時逃避檢查(比如兩個0連續的情況),所以使循環變量進行減一操作 
		}
	}
	cout << cnt << endl;
	for(int k=0;k<cnt;k++)
		cout << a[k] << " ";
	return cnt;
}
int main()
{
	int n;
	cin >> n;
	int num[n];
	memset(num,-1,4 * (n + 1));
	for(int i=0;i<n;i++)
		cin >> num[i];
	CompactIntegers(num,n);
	return 0;
} 

本題使我認識到了自己對memset()函數的理解不到位,使用時出現了錯誤。在測試程序時,我的用例並不全面而漏掉了錯誤.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章