C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で2つの容器と無限の給水を使用して1リットルを測定します


この問題では、容量xとyの2つの船と、無限の水の供給が与えられます。私たちの仕事は、1つの容器で正確に1リットルを計算できるプログラムを作成することです。 xとyが共素数であるという条件が与えられます。 コプライム 互いに素、互いに素とも呼ばれます は、最大公約数が1である2つの数です。つまり、これは彼らのgcd(最大公約数 )は1です。

ここで、容量xの2つの容器V1と容量yのV2があるとします。これらの2つの容器を使用して1リットルを測定するには、最初の容器に給水を充填してから、2番目の容器に注ぎます。このプロセスは、容器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

  1. C ++の2つの方程式を使用して、繰り返し数と欠落している数を見つけます

    この問題では、サイズNの配列arr []が与えられます。これは1からNの範囲の整数値で構成されます。また、範囲内の1つの要素xが欠落していますが、配列内の1つの要素yは二重に発生します。私たちのタスクは、2つの方程式を使用して繰り返し数と欠落数を見つけることです。 。 問題を理解するために例を見てみましょう 入力 arr[] = {1, 2 , 3, 3} 出力 missing = 4, double = 3 ソリューションアプローチ この問題を解決する方法は、2つの値xとyに対して2つの方程式を使用することです。次に、方程式を解いてxとyの値を取得します。 方程式とその作成方

  2. C ++を使用して、指定された一方の端と中間の線のもう一方の端点を見つけます

    この問題では、線の始点A(x A の2点の座標が与えられます。 、y A )および中点M(x M 、y M )。私たちのタスクは、指定された一方の端と中央にある線のもう一方の端点を見つけることです。 。 問題を理解するために例を見てみましょう 入力 A = [1, 2], M = [3, 0] 出力 [5, -2] 説明 行は-です ソリューションアプローチ この問題を解決するために、数学で学んだ幾何学の概念を使用します。すべての線に中点式があることを覚えているなら、 mid(x) = (x1 + x2) / 2 mid(y) = (y1 + y2) / 2