陣列元素的區間刪除
阿新 • • 發佈:2018-12-14
給定一個順序儲存的線性表,請設計一個函式刪除所有值大於min而且小於max的元素。刪除後表中剩餘元素保持順序儲存,並且相對位置不能改變。
函式介面定義:
int Delete( int A[], int L, int minA, int maxA );
其中A
是整型陣列,儲存原始線性表的元素;L
是表長,即A
中元素的個數;minA
和maxA
分別為待刪除元素的值域的下、上界。函式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; }