1. 程式人生 > >[藍橋杯]ALGO-79.刪除陣列零元素

[藍橋杯]ALGO-79.刪除陣列零元素

 

從鍵盤讀入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     int
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 }
C解法

 

解題思路:

標記兩個下標,分別為0和非0

遍歷陣列,遇到非0數字,將其替換到0的位置,同時0標記下標右移一位