問題描述:
從鍵盤讀入n個整數放入數組中,編寫函數CompactIntegers,刪除數組中所有值為0的元素,其后元素向數組首端移動。注意,CompactIntegers函數需要接受數組及其元素個數作為參數,函數返回值應為刪除操作執行后數組的新元素個數。輸出刪除后數組中元素的個數並依次輸出數組元素。
輸入格式:
第一行輸入一個整數,代表數組中有多少個數,第二行輸入數組的元素。
輸出格式:
第一行輸出不為0的元素個數,第二行輸出不為0的元素。
測試樣例1:
輸入:
5
3 4 0 0 2
輸出:
3
3 4 2(3 4 2是以空格隔開的3個數)
測試樣例2:
輸入:
3
0 0 0
輸出:
0
測試樣例3:
輸入:
7
0 0 7 0 0 9 0
輸出:
2
7 9
思路:直接對整個數組進行遍歷,遇到0就把0后面的元素往前移,然后減少數組的元素個數。
代碼如下:
1 #include<iostream> 2 using namespace std; 3 int CompactIntegers(int *arr,int n) 4 { 5 //直接從頭到尾遍歷整個數組,是0就將n減1,同時數組下表往前移 6 for (int i = 0; i < n; i++) 7 { 8 if (arr[i] == 0) 9 { 10 //將所有元素向前移 11 int j = i; 12 for (; j < n - 1; j++) 13 { 14 arr[j] = arr[j + 1]; 15 } 16 //將要判斷的元素的下標前移 17 i = i - 1; 18 //非0元素個數減1 19 n--; 20 } 21 } 22 return n; 23 } 24 25 int main(void) 26 { 27 int n; 28 cin >> n; 29 int* arr = new int[n]; 30 for (int i = 0; i < n; i++) 31 { 32 cin >> arr[i]; 33 } 34 int t = CompactIntegers(arr, n); 35 cout << t << endl; 36 if (t == 0) 37 { 38 return 0; 39 } 40 else 41 { 42 for (int i = 0; i < t - 1; i++) 43 { 44 cout << arr[i] << " "; 45 } 46 cout << arr[t - 1]; 47 } 48 return 0; 49 }