C++中从数组中选择四条边求最大面积矩形


矩形的面积计算为其边长的乘积。所有矩形都有四条边,其中对边相等。为了计算面积,我们需要长度和宽度作为两条边。这样我们就可以得到想要的结果 -

矩形面积 = 长度 X 宽度

我们得到一个数组,其中包含矩形的边长。该数组以随机顺序包含所有四条边的值。这里的任务是从数组中找到两对最大的边,以便获得矩形可能的最大面积。

输入 

Arr[] = { 1,2,1,3,4,4,2,3,5,7 }.

输出 - 从数组中选择四条边求最大面积矩形 - 12

解释 - 如果我们将给定数组按降序排序,我们将得到,

Arr[]= { 7,5,4,4,3,3,2,1,1 }

这里最大的两对边(总共四条边)是 { (4,4),(3,3) }。因此,所需的可能最大面积为 12 平方单位。

输入 

Arr[] = { 8,2,5,3,4,9,8,3,5,7 }.

输出 - 从数组中选择四条边求最大面积矩形 - 40

解释 - 如果我们将给定数组按降序排序,我们将得到,

Arr[]= { 9,8,8,7,5,5,4,3,3,2 }

这里最大的两对边(总共四条边)是 { (8,8),(5,5) }。因此,所需的可能最大面积为 40 平方单位。

下面程序中使用的策略如下

  • 声明一个整数数组,其中包含矩形边长的对。(Arr[])

  • 创建一个变量来存储数组的大小。(n)

  • 函数 maxArea(int arr[],int n) 用于计算矩形最大面积。它以输入数组及其大小作为参数。

  • 在 maxArea() 中,我们声明了一个数组 Dim[2] 来存储在遍历排序数组 (按降序排列) arr[] 后找到的两条最大边。

  • 由于 arr[] 按降序排序,因此前 4 条边必须位于开头。我们迭代 arr[],以便找到一对边。

  • 首先将 Dim[] 初始化为 0。

  • 在 while 循环中,我们设置条件,即它持续到 j<2,即没有为 dim[0] 和 dim[1] 找到值,或者到达 arr[] 的末尾。(i<n)。

  • 如果找到这样的一对边,(if(arr[i]==arr[i+1])),则将其存储在 dim[j] 中,并为下一条边递增 j。

  • 将结果作为 dim[0] 和 dim[1] 的乘积返回。

  • 注意 - sort(arr,n) 应该将 arr 按降序排序。

示例

#include <iostream>
using namespace std;
// function for finding max area for rectangle
int maxArea(int arr[], int n){
   int dim[2]={0};
   int i=0,j=0;
   while( j<2 && i<n){
      if(arr[i]==arr[i+1]){
         dim[j++]=arr[i];
      }
      ++i;
   }
   return dim[0]*dim[1];
}
// driver function
int main(){
   int arr[] = { 1,8,5,1,8,2,5,3 };
   int n = 8;
   sort(arr,n); // supposed to sort array in descending order
   cout <<”Maximum area of rectangle by picking four sides from array:”<< maxArea(arr, n);
   return 0;
}

输出

如果我们运行以上代码,它将生成以下输出 -

Maximum area of rectangle by picking four sides from array: 40

更新于: 2020-08-14

464 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.