Thứ Bảy, 3 tháng 12, 2016

Bài tập 194: Liệt kê tất cả các cặp giá trị gần nhau nhất trong mảng



#include <iostream>
using namespace std;

#define MAX 100

// MẢNG 1 CHIỀU 
// 1. HÀM NHẬP SỐ PHẦN TỬ
void NhapN(int &N)
{
 do
 {
  cout << "Moi ban nhap so phan tu cua mang N = ";
  cin >> N;

  // 0 < N <= MAX
  // Điều kiện phải ngược lại 
  if (N <= 0 || N > MAX)
   cout << "Nhap sai vui long nhap la 0 < N <= " << MAX << "\n";

 } while (N <= 0 || N > MAX);
}

// 2. HÀM NHẬP MẢNG
void NhapMang(int A[], int N)
{
 for (int i = 0; i < N; i++)
 {
  cout << "A[" << i << "]= ";
  cin >> A[i];
 }
}

// 3. HÀM XUẤT MẢNG
void XuatMang(int A[], int N)
{
 for (int i = 0; i < N; i++)
 {
  cout << A[i] << "\t";
 }
}

// Bài 194: liệt kê tất cả các cặp giá trị gần nhau nhất trong mảng
// VD : N = 4
// 2 5 3 4
//==> (2,3) và (3,4) và (5,4)
// Tìm khoảng cách min
int Tim_KC_Min(int A[], int N)
{
 int min = abs(A[0] - A[1]);
 for (int i = 0; i < N - 1; i++)
 {
  for (int j = i + 1; j < N; j++)
  {
   if (abs(A[i] - A[j]) < min)
    min = abs(A[i] - A[j]);
  }
 }
 return min;// Khoảng cách nhỏ nhất trong mảng
}

// Liệt kê các cặp có giá trị min
void LietKe_KC_Min(int A[], int N)
{
 int min = Tim_KC_Min(A, N);
 for (int i = 0; i < N - 1; i++)
 {
  for (int j = i + 1; j < N; j++)
  {
   if (abs(A[i] - A[j]) == min)
    cout << "(" << A[i] << "," << A[j] << ")\n";
  }
 }
}


int main()
{

 int N = 0;
 NhapN(N);

 int A[MAX];
 NhapMang(A, N);
 cout << "MANG BAN DAU\n";
 XuatMang(A, N);
 cout << "\n";

 cout << "Ket qua bai 194 : \n";
 LietKe_KC_Min(A, N);

 cout << "\n";
 
 return 0;
}

Link code backup: http://codepad.org/BpcPwehZ

Không có nhận xét nào:

Đăng nhận xét