समस्या विवरण
मान लीजिए हमारे पास एक विशिष्ट आयताकार वेब पेज क्षेत्र है, हमारा काम एक आयताकार वेब पेज डिजाइन करना है, जिसकी लंबाई L और चौड़ाई W निम्नलिखित आवश्यकताओं को पूरा करती है:
- वेब पेज का क्षेत्रफल दिए गए लक्ष्य क्षेत्रफल के बराबर होना चाहिए।
- चौड़ाई W लंबाई L से बड़ी नहीं होनी चाहिए, और L >= W।
- L और W के बीच का अंतर जितना संभव हो उतना छोटा होना चाहिए।
उदाहरण
यदि इनपुट है: 4, तो आउटपुट होगा [2,2], क्योंकि लक्ष्य क्षेत्रफल 4 है, और इसे बनाने के सभी संभावित तरीके [1,4], [2,2], [4,1] हैं। यहां आवश्यकता के अनुसार, [1,4] अवैध है; आवश्यकता 3 के अनुसार, [4,1] [2,2] की तुलना में उचित नहीं है। इसलिए लंबाई L 2 है, और चौड़ाई W 2 है।
हल करने का दृष्टिकोण
इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें:
- i := area के वर्गमूल से आरंभ करें, जब i > 0, i को 1 से घटाते हुए:
- यदि area % i == 0, तो:
- एक सरणी v परिभाषित करें, {area/i, i} डालें
- v लौटाएं
- यदि area % i == 0, तो:
- {-1, -1} लौटाएं
C++ कार्यान्वयन
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v) {
cout << "[";
for(int i = 0; i < v.size(); i++) {
cout << v[i] << ", ";
}
cout << "]" << endl;
}
class Solution {
public:
vector<int> constructRectangle(int area) {
for (int i = sqrt(area); i > 0; i--) {
if (area % i == 0) {
vector<int> v{ area / i, i };
return v;
}
}
return { -1, -1 };
}
};
int main() {
Solution ob;
print_vector(ob.constructRectangle(4));
return 0;
}
इनपुट
4
आउटपुट
[2, 2, ]