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

C++で2種類のアイテムを含むサイズ3のグループの最大数


タスクは、タイプAのアイテムがN個、タイプBのアイテムがM個与えられたときに形成できるサイズ3のグループの最大数を計算することです。

また、各グループには、AまたはBのいずれかのタイプのアイテムが少なくとも1つ必要です。

例を使用して、私たちがしなければならないことを理解しましょう-

入力 − n =3、M =5

入力 − 2

説明

Group 1: 1 item of type A and 2 items of type B
Group 2: 1 item of type A and 2 items of type B
In total, 2 items of type A and 4 items of type B are used.

入力 − n =5、M =9

入力 − 4

以下のプログラムで使用されるアプローチは次のとおりです

  • 次の状況は4つのケースに分けることができます-

    • ケース1

      M> =2Nの場合、可能なグループの最大数=M

    • ケース2

      N> =2Mの場合、可能なグループの最大数=N

    • ケース3

      (M + N)%3 ==0の場合、可能なグループの最大数=(M + N)/ 3

    • ケース4

      上記の条件のいずれにも当てはまらない場合、最大ケース数は(M + N)/ 3 +(残りのグループ)になります。

      グループが残っているかどうかを確認するには、N =N%3とM =M%3を設定して両方のタイプの残りのアイテムを取得し、次の条件を使用して確認します-

      If(N!=0 &&M!=0 &&(N + M)> =3)

      上記の条件が当てはまる場合は、最終結果に1を追加します。

  • 関数MaxGrp()で、上記の場合のif条件チェックを使用します

  • (M> =2 * N)が真の場合、答えとしてMを返します。それ以外の場合、(N> =2 * M)がtrueの場合、答えとしてNを返します。

  • 上記の両方の条件が当てはまらない場合は、((M + N)%3 ==0)かどうかを確認してください。真の場合は、答えとして(M + N)/3を返します。

  • 上記の条件のいずれにも当てはまらない場合は、int型の変数count =(M + N)/3を初期化します。

    N =N%3およびM =M%3を入力し、ケース4で上記の条件を使用して、残りのグループを確認します。条件が真の場合は、1を加算してカウントし、回答を返します。

#include<bits/stdc++.h>
using namespace std;
// Implements above mentioned steps.
int MaxGrp(int N, int M){
   if (N >= 2 * M)
      return N;
   if (M >= 2 * N)
      return M;
   if ((M + N) % 3 == 0)
      return (M + N)/3;
   int count = (M + N)/3;
   M %= 3;
   N %= 3;
   if (M && N && (M + N) >= 3)
      count++;
   return count;
}
int main(){
   int N = 5, M = 9;
   cout << MaxGrp(N, M);
   return 0;
}

出力

上記のコードを実行すると、次の出力が得られます-

4

  1. 最大グループをカウントするC++コードを作成できます

    n個の要素を持つ配列Aがあるとします。学生のnグループがありました。グループとは、他の人と一緒にコードを記述できる1人、または同じチームでコードを記述したい2人のいずれかです。しかし、メンターはちょうど3人のチームを形成することにしました。メンターが形成できる3人のチームの最大数を見つける必要があります。 2人のグループの場合、両方の生徒がコードを書くか、両方が書かないかのどちらかです。 2人のグループから2人の生徒がコードを書く場合、彼らは同じチームに所属している必要があります。 したがって、入力がA =[2、2、2、1、1、1、1]の場合、メンターは次のようなチームを作成できるため、出力

  2. 最大ベンド数のC++パス長

    二分木が与えられる問題を解決するため。次に、曲がりの数が最大のパスを見つける必要があります。つまり、パスの方向が左から右に、またはその逆に変化する場合、たとえば、曲がりが考慮されます 入力- 出力- 6 このアプローチでは、ツリーをトラバースして、以前の動きを追跡します。方向が変わった場合は、曲げカウントを更新するだけで、最大値が見つかります。 解決策を見つけるためのアプローチ このアプローチでは、すべてのパスをトラバースし、回答を更新するベンドの最大数を見つけます。 例 #include <bits/stdc++.h> using namespace std; s