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

水を注ぐゲームをチェックするためのC++コードは、すべての勝者かどうか


n個の要素を持つ配列Aがあり、別の数がsであるとします。テーブルには空のマグカップが1つと、空でないマグカップがn個あります。ゲームでは、プレーヤーはほとんどいません。それぞれの動きで、プレーヤーは空でないマグカップの水を取り、そこからすべての水をカップに注ぎます。いっぱいになると、プレイヤーは負けます。それらすべてが勝者になるかどうかを確認する必要があります(カップがいっぱいになることはありません)。 1つがすでに完全に埋められている場合、次のプレーヤーは自分の動きを再生しません。ここで、sは空のカップの容量であり、A[i]はi番目のカップに存在する水の量です。

したがって、入力がA =[3、1、3]のような場合; s =4の場合、出力はTrueになります。これは、1番目と2番目のプレーヤーによってカップがいっぱいになるためです。最後の1つでは、プレーヤーはその動きを再生しません。

ステップ

これを解決するには、次の手順に従います-

k := 0
n := size of A
sort the array A
for initialize i := 0, when i < n - 1, update (increase i by 1), do:
   k := k + A[i]
if k > s, then:
   return false
Otherwise
   return true

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
bool solve(vector<int> A, int s){
   int k = 0;
   int n = A.size();
   sort(A.begin(), A.end());
   for (int i = 0; i < n - 1; i++)
      k += A[i];
   if (k > s)
      return false;
   else
      return true;
}
int main(){
   vector<int> A = { 3, 1, 3 };
   int s = 4;
   cout << solve(A, s) << endl;
}

入力

{ 3, 1, 3 }, 4

出力

1

  1. ツリーがC++で同形であるかどうかを確認します

    二分木では、各ノードに2つの子、つまり左の子と右の子が含まれます。 2つの二分木があり、タスクは、ツリーの1つが、別のツリーを左にひっくり返すことによって取得できるかどうかを確認することであると仮定します。 左側にある他のツリーを反転して取得できる場合、ツリーは同型です。 例 入力-1 出力: 同形 説明: 与えられたTree-2は、左側のTree-1を反転することで取得できるため、Treeは同型です。 この問題を解決するためのアプローチ この特定の問題を解決するための再帰的なアプローチは、ブール関数が両方のツリーのルートノードをチェックすることです。両方のツリーの

  2. C++でバイナリ文字列の1の間に0があるかどうかを確認します

    ここで、1つの興味深い問題が発生します。文字列の1の間に0があるかどうかを確認する必要があります。そうでない場合、文字列は有効であり、そうでない場合は無効です.3つの文字列があるとします- 10001111010 00001111100 01111101111 これらの3つの文字列のうち、1のストリーム内に0がないため、Bのみが有効です この問題を解決するために、文字列に存在する最初の1のインデックスを見つけ、最後の1のインデックスも見つけます。次に、これら2つのインデックスに0があるかどうかを確認し、ある場合はfalseを返し、そうでない場合はfalseを返します。 tr