[藍橋杯]ALGO-79.刪除陣列零元素
阿新 • • 發佈:2018-12-22
從鍵盤讀入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
先上解法:
1 #include <stdio.h> 2 using namespace std; 3 4 int main(void) 5 { 6 int n; 7 scanf("%d",&n); 8 int num[n]; 9 10 for (int i=0 ; i <n ; i ++) 11 scanf("%d",&num[i]); 12 13 intC解法len=0; 14 for (int i=0; i<n ; i++) 15 { 16 if (num[i] != 0) 17 { 18 num[len] = num[i]; 19 len ++; 20 } 21 } 22 printf("%d\n",len); 23 for (int i=0; i<len; i++) 24 printf("%d ",num[i]); 25 26 return 0; 27 }
解題思路:
標記兩個下標,分別為0和非0
遍歷陣列,遇到非0數字,將其替換到0的位置,同時0標記下標右移一位