Yêu cầu:
– Nhập vào giá trị X. Viết hàm xoá phần tử có giá trị gần X nhất.
Ví dụ: cho x = 5 và dãy số: 1 3 -9 0 4 6 7 8. Phần tử gần x = 5 nhất là: 4 và 6. Dãy số sau khi xóa sẽ là: 1 3 -9 0 7 8
Thuật toán:
– Tìm độ lệch nhỏ nhất giữa x và A[i].
– Xóa phần tử bằng cách dồn phần tử.
Code:
/************************************************************ * Author: VNCODING * History * 2014/10/27 first create VNCODING *************************************************************/ #include <stdio.h> #include <conio.h> #include <math.h> void print_arr(int A[], int n); void del_apro_x(int A[], int* n, int x); void main() { int A[] = {1, 4, -9, 0, 6, 6, 8, 4}; int n = sizeof(A)/sizeof(int); printf("\nMang truoc khi xoa "); print_arr(A, n); del_apro_x(A, &n, 5); printf("\nMang sau khi xoa "); print_arr(A, n); getch(); } void del_apro_x(int A[], int* n, int x) { int i, j; int delta = abs(x - A[0]); //Tim do lech gan nhat cua x va cac phan tu trong mang for(i = 1; i < *n - 1;i++) { if(delta > abs(x - A[i])) delta = abs(x - A[i]); } //Duyet mang tu phan tu cuoi for(i = *n - 1; i >= 0; i--) { if(delta == abs(x - A[i])) { for(j = i; j < *n - 1; j++) { A[j] = A[j+1]; } (*n)--; } } } void print_arr(int A[], int n) { int i; printf("\n========================="); for(i = 0; i < n; i++) { printf("\nA[%d] = %d", i, A[i]); } printf("\n========================="); }
Kết quả:
Mang truoc khi xoa ========================= A[0] = 1 A[1] = 4 A[2] = -9 A[3] = 0 A[4] = 6 A[5] = 6 A[6] = 8 A[7] = 4 ========================= Mang sau khi xoa ========================= A[0] = 1 A[1] = -9 A[2] = 0 A[3] = 8 =========================
Leave a Reply
You must be logged in to post a comment.