समस्या विवरण
N गिलास दिए गए हैं जिनमें पानी है, और उनकी प्रत्येक क्षमता की सूची दी गई है। कार्य ठीक K गिलास भरने के लिए आवश्यक न्यूनतम बोतलों की संख्या ढूंढना है। प्रत्येक बोतल की क्षमता 100 यूनिट है।
उदाहरण
यदि N = 5, K = 4, capacity[] = {1, 2, 3, 2, 1}।
- क्षमता 2, 3, 2 वाले गिलास भरने के लिए 8 यूनिट्स की आवश्यकता होती है।
- इस तरह, केवल 1 बोतल खोलना पर्याप्त है।
एल्गोरिदम
- ठीक K गिलास भरने के लिए, सबसे कम क्षमता वाले K गिलास लें
कुल आवश्यक बोतलों की गणना निम्नानुसार की जा सकती है:
सीलिंग वैल्यू ऑफ (पहले k गिलास की क्षमताओं का योग) / (1 बोतल की क्षमता)।
उदाहरण
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int minBottles(int *capacity, int n, int k) {
sort(capacity, capacity + n);
int sum = 0;
for (int i = 0; i < k; ++i) {
sum += capacity[i];
}
return ceil((double)sum / 100);
}
int main() {
int capacity[] = {1, 2, 3, 2, 1};
cout << "Min bottles required = " << minBottles(capacity, 5, 4) << endl;
return 0;
} आउटपुट
जब आप उपरोक्त प्रोग्राम को कंपाइल और एक्जीक्यूट करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है:
Min bottles required = 1