从 C++ 数组中构造周长最大的三角形


问题说明

给定一个非负整数数组。找出数组中三个元素,组成周长最大的三角形

示例

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

算法

  • 将数组按非递减顺序排序。这样一来,第一个元素将最大,最后一个元素将最小
  • 如果这个已排序数组的前 3 个元素组成三角形,那么它将是周长最大的三角形

示例

 在线演示

#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;
}

输出

当你编译和执行以上的程序时,它将生成以下输出 −

Max perimeter = 17

更新于:2020-01-21

254 次浏览

启动你的职业生涯

完成课程,获得认证

开始
广告
© . All rights reserved.