इस समस्या में, हमें x और y क्षमता वाले दो बर्तन और अनंत पानी की आपूर्ति दी जाती है। हमारा काम एक ऐसा प्रोग्राम बनाना है जो एक बर्तन में ठीक 1 लीटर की गणना कर सके। इस शर्त को देखते हुए कि x और y सह-अभाज्य हैं। सह-प्राइम्स अपेक्षाकृत प्रधान, परस्पर प्रधान . के रूप में भी जाना जाता है वे संख्याएँ दो संख्याएँ हैं जिनमें 1 उनका एकमात्र उभयनिष्ठ भाजक है। तो, इसका मतलब है कि उनका gcd(सबसे बड़ा सामान्य भाजक ) 1 है।
यहाँ, मान लीजिए कि हमारे पास दो बर्तन V1 हैं जिनकी क्षमता x है और V2 क्षमता y के साथ है। इन दो बर्तनों का उपयोग करके 1 लीटर मापने के लिए हम पहले बर्तन को पानी की आपूर्ति से भरेंगे और फिर इसे दूसरे बर्तन में डालेंगे। क्या यह प्रक्रिया तब तक जारी रहती है जब तक बर्तन V1 में 1 लीटर पानी न हो जाए।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट -
V1 = 5, V2 = 8 V1 = 5 ; V2 = 0 -> pour water from V1 to V2 and refill it. V1 = 5 ; V2 = 5 -> pour water from V1 to V2 and refill it. V1 = 2 ; V2 = 0 -> pour water from V1 to V2. Now, V2 is filled, empty it. V1 = 5 ; V2 = 2 -> pour water from V1 to V2 and refill it. V1 = 5 ; V2 = 7 -> pour water from V1 to V2 and refill it. V1 = 4 ; V2 = 0 -> pour water from V1 to V2. Now, V2 is filled, empty it. V1 = 1 ; V2 = 0 -> pour water from V1 to V2 and refill it. Here, V1 measures 1 litre of water.
उदाहरण
समाधान का वर्णन करने के लिए कार्यक्रम,
#include <iostream> using namespace std; int x, y, V1, V2 = 0; int transferWater(int amt1, int amt2) { if (amt1 + amt2 < y){ V2 += V1; return V1; } int transferred = y - V2; V2 = 0; return transferred; } void measure1Litre() { while(V1 != 1){ if (V1 == 0) V1 = x; cout<<"Vessel 1: "<<V1<<" | Vessel 2: "<<V2<<endl; V1 = V1 - transferWater(V1, V2); } cout<<"Vessel 1: "<<V1<<" | Vessel 2: "<<V2<<endl; } int main() { x= 5, y = 8; measure1Litre(); return 0; }
आउटपुट
Vessel 1: 5 | Vessel 2: 0 Vessel 1: 5 | Vessel 2: 5 Vessel 1: 2 | Vessel 2: 0 Vessel 1: 5 | Vessel 2: 2 Vessel 1: 5 | Vessel 2: 7 Vessel 1: 4 | Vessel 2: 0 Vessel 1: 5 | Vessel 2: 4 Vessel 1: 1 | Vessel 2: 0