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

Cで2ステップで引き出すことができる最大のお金


L1とL2のように、コインの形でいくらかのお金を持っている2つのロッカーが与えられます。 L1にはA枚のコインがあり、L2にはB枚のコインが入っています。引き出したお金が最大になるように、ロッカーからお金やコインを引き出す必要があります。いずれかのロッカーからコインが引き出されるたびに、以前のカウントより1少ないコインに置き換えられます。 L1からAコインを引くと、A-1コインに置き換えられ、L2からBコインを引くと、B-1コインに置き換えられます。タスクは、2つのステップで引き出される金額を最大化することです。つまり、コインを引き出すことができるのは2回だけです。

入力 − L1-10、L2-11

出力 −2段階で引き出すことができる最大金額− 21

説明 −ステップ1では、L2から11枚のコインを引き出し、L2は11-1=10枚のコインに置き換えられます。

ステップ2では、L1とL2の両方に10枚のコインがあるので、どのコインからでも引き出す​​ことができ、最大で11 + 10=21枚のコインがあります。

入力 − L1-5、L2-5

出力 −2段階で引き出すことができる最大金額− 10

説明 −ステップ1では、L1から5枚のコインを引き出し、L1は5-1=4枚のコインに置き換えられます。

ステップ2では、L1には4枚のコインがあり、L2には5枚のコインがあるので、L2から5枚のコインを取り、最大で5 + 5=10枚のコインがあります。

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

  • いくつかのコインを含む整数として2つのロッカーL1とL2があります。

  • 関数maxMoney(int A、int B)は、ロッカー内のコインの数を入力として受け取ります。

  • maxMoney()内では、変数「money」を使用して最大金額を保存します。

  • 最初、お金はAまたはBのどちらか多い方から値を受け取ります。(money =A> B?A:B)

  • お金の価値をAまたはBと比較して、どのコンテナのコインが引き出されているかを確認します。

  • 次に、そのコンテナを前の量より1少ない量と交換します。 (A--またはB--)

  • 繰り返しますが、お金はAまたはBのどちらか多い方からの価値を追加します。 (money + =A> B?A:B)

    kが小さい場合、最小のk要素の合計は最小になります-
  • D1にabs((配列全体の合計)-(2 *最小k要素の合計))を格納します。配列の合計にもこれらの要素があるため、2回です。

    kが大きい場合、最大のk要素の合計が最大になります-

  • D2にabs((配列全体の合計)-(2 *最高のk要素の合計))を格納します。配列の合計にもこれらの要素があるため、2回です。

  • D1とD2を比較し、最大値をmaxDに保存します。

  • 結果としてmaxDを返します。

Code:
#include <stdio.h>
#include <math.h>
// Function to return the maximum coins we can get
int maxMoney(int A, int B){
   //take coins
   int money=A>B?A:B;
   //refill the lockers with 1 less no.of coins
   if(money==A)
      A--;
   else
      B--;
   //withdraw again
   money+=A>B?A:B;
   return money;
}
// Driver code
int main(){
   int L1 = 8, L2 = 9;
   printf("Maximum money that can be withdrawn in two steps: %d" , maxMoney(L1, L2));
   return 0;
}

出力

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

Maximum money that can be withdrawn in two steps: 17

  1. C++でN*Nチェス盤に配置できる最大のビショップ

    チェス盤のサイズを示す入力Nが与えられます。ここでのタスクは、Nの任意の値について、2人のビショップが互いに攻撃できないようにNXNチェス盤に配置できるビショップの数を見つけることです。例を挙げて理解しましょう。 入力 − n =2 出力 − N * Nチェス盤に配置できる最大のビショップ− 2(上記のように) 説明 −上に示したように、矛盾しない位置は司教が配置されている場所だけです。せいぜい2X2チェス盤のビショップ。 入力 − n =5 出力 − N * Nチェス盤に配置できる最大ビショップ:8(上記のように) 以下のプログラムで使用されているアプローチは次のとおりで

  2. C++で二分木の2つのノードを結合することによって形成できる最大長サイクル

    二分木が与えられます。目標は、指定されたツリーで最大の長さのサイクルを見つけることです。これを行うには、ルートノードから左側のサブツリーと右側のサブツリーの最大の高さを見つけ、これらの最大長のパスを結合して最長のサイクルを取得します。 上記のツリーの場合、最大長サイクルは1-2-3-4-7-6または1-6-7-4-3-2-1です。長さは6です。 入力 −ツリー 出力 −最大長サイクルは− 5 説明 −左側のサブツリーの最大高さは3、右側のサブツリーの最大高さは1です。サイクルの長さは3 + 1 + 1=5になります。サイクルは1-2-3-4-6または1-6-4-3-2