1. 程式人生 > >陣列元素的區間刪除

陣列元素的區間刪除

給定一個順序儲存的線性表,請設計一個函式刪除所有值大於min而且小於max的元素。刪除後表中剩餘元素保持順序儲存,並且相對位置不能改變。

函式介面定義:

int Delete( int A[], int L, int minA, int maxA );

其中A是整型陣列,儲存原始線性表的元素;L是表長,即A中元素的個數;minAmaxA分別為待刪除元素的值域的下、上界。函式Delete應將A中所有值大於minA而且小於maxA的元素刪除,同時保證表中剩餘元素保持順序儲存,並且相對位置不變,最後返回刪除後的表長。

裁判測試程式樣例:

#include <stdio.h>

#define MAXN 20

int Delete( int A[], int L, int minA, int maxA );

int main()
{
    int A[MAXN], L, minA, maxA, i;

    scanf("%d", &L);
    for (i=0; i<L; i++) scanf("%d", &A[i]);
    scanf("%d %d", &minA, &maxA);
    L = Delete(A, L, minA, maxA);
    for (i=0; i<L; i++) printf("%d ", A[i]);
    printf("\n");

    return 0;
}

/* 你的程式碼將被嵌在這裡 */

輸入樣例:

10
4 -8 2 12 1 5 9 3 3 10
0 4

輸出樣例:

4 -8 12 5 9 10 

 下面為我寫的函式:

int Delete( int A[], int L, int minA, int maxA ){
  int b[MAXN] = {0},n=0;
  for(int i=0;i<L;i++){
    if(A[i]>minA && A[i]<maxA){
      b[i] = 1;
      n++;
    }
  }
  int j=0;
  for(int i=0;i<L;i++){
    if(b[i]==0){
      A[j]=A[i];
      j++;
    }
  }
  return L-n;
}