Yêu cầu:
Viết hàm tìm và xóa tất cả các phần tử trùng với x trong mảng một chiều các số nguyên, nếu không tồn tại phần tử x trong mảng thì trả về -1.
Thuật toán:
Code:
/************************************************************ * Author: VNCODING * History * 2014/11/16 first create VNCODING *************************************************************/ #include "stdio.h" #include "conio.h" int delete_dupX(int A[], int *n, int x); void print_arr(int A[], int n); void main( void ) { int A[] = {5, 10, 15, 1, 5, 4, 0, 5, 6}; int n = sizeof(A)/sizeof(int); print_arr(A, n); delete_dupX(A, &n, 5); print_arr(A, n); getch(); } //Delete element is duplicated with X int delete_dupX(int A[], int *n, int x) { int i, j; int res = -1; for(i = *n-1; i >= 0; i--) { if(A[i] == x) { for(j = i; j < *n-1; j++) { A[j] = A[j+1]; } (*n)--; res = 0; } } return res; } //Display array void print_arr(int A[], int n) { int i; printf("\n============================="); for(i = 0; i < n; i++) { printf("\nA[%d] = %d", i, A[i]); } }
Kết quả:
============================= A[0] = 5 A[1] = 10 A[2] = 15 A[3] = 1 A[4] = 5 A[5] = 4 A[6] = 0 A[7] = 5 A[8] = 6 ============================= A[0] = 10 A[1] = 15 A[2] = 1 A[3] = 4 A[4] = 0 A[5] = 6
Phải code như này nè:
int pos = 0;
for (int i = 0; i < n; i++) {
if (a[i] == x) continue;
a[pos++] = a[i];
}