इस समस्या में, हमें क्षमता x और y वाले दो वेसल्स और अनंत पानी की आपूर्ति दी गई है। हमारा कार्य एक ऐसा प्रोग्राम बनाना है जो एक वेसल में ठीक 1 लीटर की गणना कर सके। दी गई शर्त है कि x और y सह-अभाज्य हैं। सह-अभाज्य को अपेक्षाकृत अभाज्य, पारस्परिक रूप से अभाज्य के रूप में भी जाना जाता है, ये दो संख्याएं हैं जिनका केवल 1 सामान्य भाजक होता है। इसका तात्पर्य है कि उनका gcd (महत्तम सामान्य भाजक) 1 है।
यहां, मान लीजिए हमारे पास क्षमता x वाला वेसल V1 और क्षमता y वाला वेसल V2 है। इन दो वेसल्स का उपयोग करके 1 लीटर मापने के लिए हम पहले वेसल को पानी की आपूर्ति से भरेंगे और फिर इसे दूसरे में डालेंगे। इस प्रक्रिया को तब तक जारी रखेंगे जब तक वेसल V1 में 1 लीटर पानी न हो जाए।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट −
V1 = 5, V2 = 8 V1 = 5 ; V2 = 0 -> V1 से V2 में पानी डालें और इसे रिफिल करें। V1 = 5 ; V2 = 5 -> V1 से V2 में पानी डालें और इसे रिफिल करें। V1 = 2 ; V2 = 0 -> V1 से V2 में पानी डालें। अब, V2 भर गया है, इसे खाली करें। V1 = 5 ; V2 = 2 -> V1 से V2 में पानी डालें और इसे रिफिल करें। V1 = 5 ; V2 = 7 -> V1 से V2 में पानी डालें और इसे रिफिल करें। V1 = 4 ; V2 = 0 -> V1 से V2 में पानी डालें। अब, V2 भर गया है, इसे खाली करें। V1 = 1 ; V2 = 0 -> V1 से V2 में पानी डालें और इसे रिफिल करें। यहां, V1 1 लीटर पानी मापता है।
उदाहरण
समाधान को स्पष्ट करने वाला प्रोग्राम,
#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