Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

สี่เหลี่ยมพื้นที่สูงสุดโดยเลือกสี่ด้านจากอาร์เรย์ใน 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[] )

  • สร้างตัวแปรเพื่อเก็บขนาดของอาร์เรย์ (น)

  • ฟังก์ชัน maxArea(int arr[],int n) ใช้เพื่อคำนวณพื้นที่สูงสุดสำหรับสี่เหลี่ยมผืนผ้า ใช้อาร์เรย์อินพุตและขนาดของมันเป็นอาร์กิวเมนต์

  • ภายใน maxArea() เราประกาศอาร์เรย์ Dim[2] สองร้านสูงสุด สองด้านที่พบหลังจากสำรวจอาร์เรย์ที่เรียงลำดับ (ในลำดับจากมากไปน้อย) arr[].

  • เนื่องจาก arr[] ถูกเรียงลำดับจากมากไปน้อย 4 ด้านสูงสุดจะต้องอยู่ในจุดเริ่มต้น เราวนซ้ำ arr[] เพื่อให้พบคู่ของด้าน

  • เริ่มต้น Dim[] ด้วย 0 ในตอนแรก

  • ภายในวง while เราใส่เงื่อนไขที่จะดำเนินต่อไปจนถึง j<2 ว่าไม่พบค่าสำหรับ dim[0] และ dim[1] หรือจุดสิ้นสุดของ arr[] (ผม

  • หากพบคู่ของด้านดังกล่าว ( 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