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

C++でaとbの特定の単位を使用して交差できる最大要素


与えられたバイナリ配列arr[] および2つの変数a およびb いくつかの初期値があります。配列内の要素を交差させるにはarr[] 2つの方法があります-

  • arr [i] ==1の場合、 aから1ユニットを使用できます。 、 bに変更はありません 。 bから1ユニット使用した場合 、その後、1単位増加します。 (aの値を元の値より大きくすることはできないことに注意してください。)

  • arr [i] ==0の場合、 aから1ユニットを使用できます。 またはb

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

入力

arr[] = {0, 0, 0, 1, 1}, a = 2, b = 2

出力

5

説明

1 st を越えるには 要素、 aから1ユニットを使用 (a =1、b =2)。

2番目の nd を越えるには 要素、 aから1ユニットを使用 (a =0、b =2)。

3 rd を越えるには 要素、 bから1ユニットを使用 (a =0、b =1)。

4番目を越えるには th 要素、 bから1ユニットを使用 aが増加します 1単位(a =1、b =0)。

5番目を越えるには th 要素、 aから1ユニットを使用 (a =0、b =0)。

したがって、すべての要素を交差させて、出力は5になります。

入力

arr[] = {1, 1, 1, 0, 1}, a = 1, b = 2

出力

4

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

  • 関数MaxElements()で、変数を初期化します Oa =0および最大 =0、両方ともint型で、aの元の値と最終的な答えをそれぞれ格納します。

  • i =0からi

  • まず、両方が aかどうかを確認します およびb ゼロに等しい場合は、ループから抜け出します。

  • それ以外の場合は(a ==0)かどうかを確認し、そうである場合は、現在の要素=1かどうかを確認し、bから1を引いてその要素と交差し、a =min(Oa、a + 1)を入力して、aが元の要素を超えないようにします。値。

    それ以外の場合は、aに影響を与えずにbから1を引くだけです。

  • それ以外の場合は、(b ==0)かどうかを確認し、そうである場合は、aから1を引くだけです。

  • それ以外の場合は、(arr [i] ==1 &&a

  • それ以外の場合は、aから1を引いて、 maxを増やします。 。

  • ループの外側で、 maxを返します 。

#include <bits/stdc++.h>
using namespace std;
int MaxElements(int arr[], int a, int b, int size){
   // Oa will have original value of a
   int Oa = a;
   int max = 0;
   // Iterate in the binary array
   for (int i = 0; i < size; i++){
      // Break loop if a and b, both are = 0
      if (a == 0 && b == 0)
         break;
      // If a is not present, use b
      else if (a == 0){
         //increase a by 1 if arr[i] == 1
         if (arr[i] == 1){
            b -= 1;
            //Checking if original value is not exceeded
            a = min(Oa, a + 1);
         }
         else
            b -= 1;
      }
      // If b is not present, use a
      else if (b == 0)
         a--;
         // if arr[i] == 1,use b
      else if (arr[i] == 1 && a < Oa){
         b -= 1;
         a = min(Oa, a + 1);
      }
      else
         a--;
         max++;
   }
   return max;
}
//main function
int main(){
   int arr[] = { 1, 1, 1, 0, 1 };
   int size = sizeof(arr) / sizeof(arr[0]);
   int a = 1;
   int b = 2;
   cout << MaxElements(arr, a, b, size);
   return 0;
}

出力

4

  1. C++でNセグメントを使用して7セグメントディスプレイに表示できる最大数

    与えられたタスクは、7セグメントディスプレイのant番号でNセグメントを使用して表示できる最大数を見つけることです。 例を使用して、私たちがしなければならないことを理解しましょう- 入力 − n =5 出力 − 71 説明 −最大数は7セグメントディスプレイに次のように表示されます- 入力 − n =6 出力 − 111 以下のプログラムで使用されるアプローチは次のとおりです 次の状況は3つのケースに分けることができます- ケース1 − Nが0または1の場合、数値を表示することはできません。 ケース2 − Nが奇数の場合。その場合、奇数

  2. C++で指定された数kで割り切れるリンクリストの最大要素と最小要素

    リンクリストは、要素がポインタを介してリンクされている線形データ構造です。リンクリストの各要素またはノードには、データ部分とリンクがあります。または、次の要素へのポインタを順番に言うことができます。要素は、メモリ内で連続していない場所を取ることができます。 データ部分と次の要素へのリンクがある単一リンクリストが与えられます。もう1つの入力は数値Kです。タスクは、数値Kで割り切れるリンクリストの最大要素と最小要素を見つけることです。線形リンクリストは、一方向にのみ移動できます。各ノードで、データ部分の分割可能性をKで確認します。その数がこれまでに見つかった最大値または最小値である場合は、