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

kを超えずにコピー操作をカウントするC++コード


n個の要素と別の数kの配列Aがあるとします。キャンディーの山はn個あります。 i番目の山にはA[i]個のキャンディーがあります。 2つのインデックスiとj(i!=j)で操作を実行してから、別のA[i]個のキャンディーをA[i]に追加できます(A [i]は減少しません)。この操作は何度でも実行できますが、残念ながら、一部のパイルにk個を超えるキャンディーが厳密に含まれていると、操作を実行できなくなります。この操作を実行できる最大回数を見つける必要があります。

したがって、入力がA =[1、2、3]のような場合。 k =5の場合、出力は5になります。これは、i =0を取ることができ、j =1の場合は3回実行でき、j=2の場合は2回実行できるためです。つまり、合計5回です。

ステップ

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

ans := 0
n := size of A
sort the array A
for initialize i := 1, when i < n, update (increase i by 1), do:
   ans := ans + (k - A[i])
return ans

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

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

入力

{ 1, 2, 3 }, 5

出力

5

  1. C++での3または7の倍数

    数nが与えられた場合、nまでの3または7の倍数の数を見つける必要があります。例を見てみましょう。 入力 100 出力 43 100までの3または7の合計43の倍数があります。 アルゴリズム 番号nを初期化します。 カウントを0に初期化します。 3から繰り返すループを作成します n。へ 現在の数が3で割り切れる場合は、カウントを増やします または7。 実装 以下は、C++での上記のアルゴリズムの実装です #include <bits/stdc++.h> using namespace std; int getMultiplesCoun

  2. C++でバイナリ文字列「ab」を解放するための操作の数

    「ab」を含むことができる文字列が与えられ、タスクは文字列から「ab」を削除または削除するために必要な操作の数を計算することです。したがって、私たちのタスクは、最初に文字列に「ab」が含まれているかどうかを確認することです。含まれている場合は、文字列「ab」を解放する必要があります。 入力 − string str =ababaa 出力 −バイナリ文字列「ab」を解放するための操作の数は− 4 説明 −文字列からわかるように、「ab」パターンが2回発生しているため、「ab」を「bba」に置き換えて、操作の数を1にし、文字列をbbaabaaにします。ここでも、「ab」を「bba」に置き