C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の配列から4つの辺を選択することによる最大面積の長方形


長方形の面積は、その辺の積として計算されます。すべての長方形には、反対側が等しくなるように4つの辺があります。面積を計算するには、2辺として長さと幅が必要です。希望する結果が得られるように-

面積の長方形=長さX幅

長方形の辺で構成される配列が与えられます。配列には、4辺すべての値がランダムな順序で含まれています。ここでのタスクは、長方形に可能な最大の面積を取得するために、配列から最も高い2つの辺のペアを見つけることです。

入力

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

出力 −配列から4つの辺を選択することによる最大面積の長方形− 12

説明 −与えられた配列を降順でソートすると、

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

ここで最大となる2組の辺(合計4辺)は{(4,4)、(3,3)}です。したがって、可能な最大面積は12平方ユニットです。

入力

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

出力 −配列から4つの辺を選択することによる最大面積の長方形− 40

説明 −与えられた配列を降順でソートすると、

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

ここで最大となる2組の辺(合計4辺)は{(8,8)、(5,5)}です。したがって、可能な最大面積は40平方ユニットです。

以下のプログラムで使用されているアプローチは次のとおりです

  • 長方形の辺のペアを含む整数の配列を宣言します。(Arr [])

  • 配列のサイズを格納する変数を作成します。 (n)

  • 関数maxArea(int arr []、int n)は、長方形の最大面積を計算するために使用されます。入力配列とそのサイズを引数として取ります。

  • maxArea()内で、配列Dim [2]を宣言しました。ソートされた配列を(降順で)トラバースした後に見つかった2つのストアの上位2つの辺arr[]。

  • arr []は降順でソートされるため、上位4辺が先頭にある必要があります。一対の辺が見つかるようにarr[]を繰り返します。

  • 最初は0でDim[]を初期化します。

  • whileループ内で、dim[0]とdim[1]の値が見つからない、またはarr[]の終わりに達するj<2まで継続するという条件を設定します。 (i

  • そのような辺のペアが見つかった場合(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

  1. C++の長方形エリアII

    (軸に沿った)長方形のリストがあるとします。ここで、各rectangle [i] ={x1、y1、x2、y2}です。ここで、(x1、y1)は左下隅のポイントであり、(x2、y2)は右上隅のポイントです。 i番目の長方形。 平面内のすべての長方形でカバーされる総面積を見つける必要があります。答えは非常に大きい可能性があるため、モジュロ10 ^ 9+7を使用できます。 したがって、入力が次のような場合 その場合、出力は6になります。 これを解決するには、次の手順に従います- m =10 ^ 9 + 7 関数add()を定義します。これには、a、b、が必要です。 r

  2. C++の長方形領域

    2D平面内の2つの直線状の長方形で覆われる総面積を求めたいとします。ここで、各長方形は、図に示すように、左下隅と右上隅によって定義されます。 これを解決するには、次の手順に従います- =HまたはD<=Fの場合、 return(C – A)*(D – B)+(G – E)*(H – F) 配列hを定義し、A、C、E、Gをhに挿入します 配列vを定義し、B、D、F、Hをvに挿入します h配列の並べ替えとv配列の並べ替え temp:=(h [2] – h [1])*(v [2] – v [1]) 合計:=temp 合計:=合計+(C – A