Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

วัดหนึ่งลิตรโดยใช้เรือสองลำและแหล่งน้ำที่ไม่มีที่สิ้นสุดใน C++


ในปัญหานี้ เราได้รับเรือสองลำที่มีความจุ x และ y และแหล่งน้ำที่ไม่มีที่สิ้นสุด งานของเราคือสร้างโปรแกรมที่สามารถคำนวณได้ 1 ลิตรในเรือลำเดียว ด้วยเงื่อนไขว่า x กับ y เป็นไพรม์ร่วม โคไพรม์ ยังเป็นที่รู้จักกันในนาม ค่อนข้างเฉพาะ, เฉพาะร่วมกัน คือตัวเลขสองจำนวนที่มี 1 เป็นตัวหารร่วมเพียงตัวเดียว นี่หมายความว่า gcd(ตัวหารร่วมที่ยิ่งใหญ่ที่สุด ) คือ 1.

สมมติว่าเรามีเรือสองลำ V1 ที่มีความจุ x และ V2 ที่มีความจุ y ในการวัด 1 ลิตรโดยใช้ภาชนะสองใบนี้ เราจะเติมภาชนะแรกจากแหล่งน้ำแล้วเทลงในภาชนะที่สอง ทำขั้นตอนนี้ต่อไปจนกว่าภาชนะ V1 จะมีน้ำ 1 ลิตร

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล

<ก่อนหน้า>V1 =5, V2 =8V1 =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 ใช้เนมสเปซ std;int x, y, V1, V2 =0;int transferWater (int amt1, int amt2) { if (amt1 + amt2  

ผลลัพธ์

เรือ 1:5 | เรือ 2:0เรือ 1:5 | เรือ 2:5Vessel 1:2 | เรือ 2:0เรือ 1:5 | เรือ 2:2Vessel 1:5 | เรือ 2:7Vessel 1:4 | เรือ 2:0เรือ 1:5 | เรือ 2:4Vessel 1:1 | เรือ 2:0