ภาพรวม
เมื่อได้รับพื้นที่ของสี่เหลี่ยมผืนผ้าเป็นอินพุต เป้าหมายคือการหาด้านของสี่เหลี่ยมผืนผ้าที่ทำให้ความต่างระหว่างความยาวและความกว้างมีค่าน้อยที่สุด
พื้นที่สี่เหลี่ยมผืนผ้า = ความยาว × ความกว้าง
ตัวอย่าง
อินพุต − พื้นที่ = 100
เอาต์พุต − ด้านของสี่เหลี่ยมผืนผ้าที่มีความต่างน้อยที่สุด:
ความยาว = 10, ความกว้าง = 10
คำอธิบาย − คู่ตัวประกอบของพื้นที่ 100 ได้แก่ 2-50, 4-25, 5-20, 10-10 คู่ที่มีความต่างน้อยที่สุดคือ 10-10 ซึ่งความต่างเท่ากับ 0 สี่เหลี่ยมจัตุรัสจึงเป็นสี่เหลี่ยมผืนผ้าที่ด้านเท่ากันทุกด้าน
อินพุต − พื้นที่ = 254
เอาต์พุต − ด้านของสี่เหลี่ยมผืนผ้าที่มีความต่างน้อยที่สุด:
ความยาว = 127, ความกว้าง = 2
คำอธิบาย − คู่ตัวประกอบที่เป็นไปได้เพียงคู่เดียวคือ 127 และ 2
แนวทางการแก้ปัญหา
หาค่ารากที่สองของพื้นที่ จากนั้นวนลูปจากค่าดังกล่าวลงมาที่ 1 เพื่อหาตัวประกอบที่ให้ความต่างน้อยที่สุด
- รับค่าพื้นที่เป็นจำนวนเต็ม
- ฟังก์ชัน
rectangleSides(int area1)รับพื้นที่และพิมพ์ด้านของสี่เหลี่ยมผืนผ้าที่มีความต่างน้อยที่สุด - กำหนดตัวแปร
length,breadth,tmp1 - ตั้งค่า
tmp1 = ceil(sqrt(area1)) - วนลูป
for (int i = tmp1; i > 0; i--) - ถ้า
area1 % i == 0ให้ตั้งlength = area1 / iและbreadth = iแล้วbreak - พิมพ์ค่า
lengthและbreadth
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
void rectangleSides(int area1){
int length, breadth;
int tmp1 = ceil(sqrt(area1));
for (int i = tmp1; i > 0; i--) {
if (area1 % i == 0) {
length = area1 / i;
breadth = i;
break;
}
}
cout << "Sides of Rectangle with minimum difference :" << endl;
cout << "Length = " << length << ", Breadth = " << breadth << endl;
}
int main(){
int Area = 140;
rectangleSides(Area);
return 0;
}
ผลลัพธ์
Sides of Rectangle with minimum difference : Length = 14, Breadth = 10