Computer >> Máy Tính >  >> Lập trình >> C ++

Tam giác chu vi tối đa từ mảng trong C ++

Tuyên bố vấn đề

Cho một Mảng các số nguyên không âm. Tìm ra ba phần tử từ mảng tạo thành một tam giác có chu vi lớn nhất

Ví dụ

If input array is {5, 1, 3, 5, 7, 4} then maximum perimeter is (7 + 5 + 5) = 17

Thuật toán

  • Sắp xếp mảng theo thứ tự không tăng dần. Vì vậy, phần tử đầu tiên sẽ là tối đa và phần tử cuối cùng sẽ là tối thiểu
  • Nếu 3 phần tử đầu tiên của mảng được sắp xếp này tạo thành một hình tam giác thì đó sẽ là hình tam giác có chu vi lớn nhất

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int getMaxPerimeter(int *arr, int n) {
   sort(arr, arr + n, greater<int>());
   int maxPerimeter = 0;
   for (int i = 0; i < n - 2; ++i) {
      if (arr[i] < arr[i + 1] + arr[i + 2]) {
         maxPerimeter = max(maxPerimeter, arr[i]
         + arr[i+1] + arr[i+2]);
         break;
      }
   }
   if (maxPerimeter) {
      return maxPerimeter;
   }
   return -1;
}
int main() {
   int arr[] = {5, 1, 3, 5, 7, 4};
   int n = sizeof(arr) / sizeof(arr[0]);
   int maxPerimeter;
   maxPerimeter = getMaxPerimeter(arr, n);
   if (maxPerimeter != -1) {
      cout << "Max perimeter = " << maxPerimeter <<
      endl;
   } else {
      cout << "Triangle formation is not possible" <<
      endl;
   }
   return 0;
}

Đầu ra

Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau -

Max perimeter = 17