Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 두 개의 용기와 무한한 물 공급을 사용하여 1리터 측정


이 문제에서 x와 y의 용량과 무한한 물의 공급을 가진 두 개의 용기가 주어졌습니다. 우리의 임무는 한 용기에서 정확히 1리터를 계산할 수 있는 프로그램을 만드는 것입니다. x와 y가 공소수라는 조건이 주어집니다. 공동 프라임 상대 소수, 상호 소수라고도 합니다. 1이 유일한 공약수인 두 수입니다. 따라서 이는 gcd(최대공약수 )은 1입니다.

여기에 용량 x의 V1 선박과 용량 y의 V2 선박이 있다고 가정해 보겠습니다. 이 두 용기를 사용하여 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