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.