刪除數組零元素
資源限制
時間限制: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()
函數的理解不到位,使用時出現了錯誤。在測試程序時,我的用例並不全面而漏掉了錯誤.