Bạn dùng biến tg và biến min là hợp lý nhất rồi. Chỉ cần sử dụng biến min là ta có thể xét điều kiện.
Biến tg dùng để tính d hay nói cách khác là độ lệch giữa x và số (đang xét).
Biến min dùng để lưu lại độ lệch nhỏ nhất (đang xét).
Ta có:
Nếu min = 1: x + min = 4;
Nếu min = -1: x + min = 2;
Vậy: Chỉ cần cho vào hàm Cut(..., x, min) là xử lý đẹp con 2.
C++ Code:
#include<stdio.h> #include<conio.h> #include <math.h> void cut (int [], int &, int, int); void main(){ clrscr(); int a[20], i, n, min=0, x, y, tg; ... for(i=0;i<n;i++){ /** Tìm độ lệch **/ tg = fabs(a[i] - x); // Lấy trị tuyệt đối hiệu 2 số if(x + tg != a[i]){ tg = -tg; // Đổi dấu } /** Kết Thúc **/ if(tg < min){ // Tìm độ lệch nhỏ nhất... min = tg; } } cut(a, n, x, min); getch(); } void cut (int a[], int &n, int x, int d){ int i, j; for(i = 0; i < n; i++){ if(a[i] == x + d){ for(j = i; j < n - 1; j++){ a[j] = a[j + 1]; } n--; } } printf("\n\n"); for(i = 0; i < n; i++){ printf("%d\t", a[i]); } }