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

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


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

したがって、入力がA =[2、2、2、1、1、1、1]の場合、メンターは次のようなチームを作成できるため、出力は3になります。[2人の最初のグループと7番目のグループ1人の]、[2人の2番目のグループと1人の6番目のグループ]、[2人の3番目のグループと1人の4番目のグループ]。

ステップ

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

p := 0
q := 0
x := size of A
for initialize i := 0, when i < x, update (increase i by 1), do:
   a := A[i]
   if a is same as 1, then:
      p := p + 1
   Otherwise
      q := q + 1
if p > q, then:
   return q + (p - q)
otherwise when p < q, then:
   return p
Otherwise
   return p

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

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
   int p = 0, q = 0;
   int x = A.size();
   for (int i = 0; i < x; i++){
      int a = A[i];
      if (a == 1){
         p = p + 1;
      }
      else{
         q = q + 1;
      }
   }
   if (p > q){
      return q + (p - q) / 3;
   }
   else if (p < q){
      return p;
   }
   else{
      return p;
   }
}
int main(){
   vector<int> A = { 2, 2, 2, 1, 1, 1, 1 };
   cout << solve(A) << endl;
}

入力

{ 2, 2, 2, 1, 1, 1, 1 }

出力

3

  1. C++での特定の操作によって2の累乗にすることができる数の数

    正の整数の配列が与えられます。目標は、1を最大で加算することにより、2の累乗にすることができる数の数を見つけることです。 log2(i)を使用して、数値が2の累乗であるか、1を加算することで2の累乗になる可能性があるかを確認します。はいの場合、カウントをインクリメントします。 例を挙げて理解しましょう。 入力 − arr [] ={1,3,2,5,6}、 出力 −2の累乗になる可能性のある数の数3 説明 − 1 + 1 =2→21、3 + 1 =4→22、2=21他は5+1 =6、6 + 1=7になります 入力 − arr [] ={2,4,8,16}、 出力 − 2の累乗になる

  2. C++のk個の更新で等しくすることができる最大要素

    与えられたタスクは、要素を最大k回インクリメントした後、特定の配列で等しくすることができる要素の最大数を見つけることです。 例を使用して、私たちがしなければならないことを理解しましょう- 入力 a[] = {1, 3, 8}, k = 4 出力 2 説明 ここでは、1を3回インクリメントし、3を4回インクリメントすることで、2つの4を取得できます。これにより、a [] ={4、4、8} 入力 arr = {2, 5, 9}, k = 2 出力 0 以下のプログラムで使用されるアプローチは次のとおりです main()関数で、int a []、sizeを初期化します。 およびk 配列