C++のゲームでゼロ以下に減らすことができる数を数えます
正の数の配列と2つの整数AおよびBが与えられます。2人のプレーヤーが、配列内の数を減らすゲームをプレイしています。プレーヤー1は配列の任意の要素をAだけ減らすことができ、プレーヤー2は配列の任意の要素をBだけ増やすことができます。目標は、プレーヤー1が0以下に減らすことができる数の数を見つけることです。最初の動き。一度0以下に減少した数は、プレーヤー2では考慮できません。
例
入力
arr[] = { 1,4,5,2 } A=2, B=3
出力
Count of numbers that can be reduced to zero or less in a game are: 1
説明
The only number that can be reduced by player 1 is 1 as on first move it will be reduced to −1. Rest all will become greater than A after player 2 increases their value.
入力
arr[] = { 1,4,5,2 } A=4, B=4
出力
Count of numbers that can be reduced to zero or less in a game are: 2
説明
On first move player 1 reduces 4 to 0. arr[]= [ 1, 0, 5, 2 ] Player 2 will increase 1 to 4. arr[]= [ 5, 0, 5, 2 ] Player 1 will decrease 2 to −2. Arr[] = [ 5, 0, 5, −2 ]. From now onwards all numbers are greater than A so cannot be reduced by player 1 to 0 or less as player 2 is also increasing them simultaneously.
以下のプログラムで使用されるアプローチは次のとおりです −
このアプローチでは、最初にA>Bかどうかを確認します。はいの場合、N回移動すると、Aはarr[]のN個の要素すべてを0以下に減らします。A<=Bの場合、チェックします
-
プレーヤー2がBを追加した後でも、Aより大きくならないすべての数値。これをC1としてカウントするとしましょう。
-
プレーヤー2がBを追加した後、A未満で、Aより大きくなるすべての数値。これをC2としてカウントするとしましょう。
合計数はC=C1 +(C2 + 1)/2になります。ケース2のように、両方のプレーヤーが同時にそれらを増減するので、それらの半分だけが0以下に減少します。そして、プレーヤー2はそれらの半分をAより大きくすることしかできません。その間、プレーヤー1は残りの半分を<=0に減らします。
-
正の数を含む整数配列を取ります。
-
2つの変数AとBを取ります。
-
関数reduced_zero(int arr []、int size、int A、int B)は、ゲームでゼロ以下に減らすことができる数のカウントを返します
-
初期カウントを0とします。
-
2つの変数temp_1とtemp_2を一時的なカウントとして使用します。
-
A> Bの場合、サイズである配列の長さを返します。
-
要素ごとにarr[i]<=A、temp_2をインクリメントします。
-
ここで、forループの終了後、count =temp_1 +(temp_2 + 1)/2を取ります。式で与えられるように。
-
結果としてカウントを返します。
例
#include <bits/stdc++.h> using namespace std; int reduced_zero(int arr[], int size, int A, int B){ int count = 0; int temp_1 = 0, temp_2 = 0; if (A > B){ return size; } for(int i = 0; i < size; i++){ if (A >= arr[i] + B){ temp_1++; } else if(A >= arr[i]){ temp_2++; } } int temp = (temp_2 + 1) / 2; count = temp + temp_1; return count; } int main(){ int arr[] = { 3, 3, 1, 2, 4, 7, 1}; int A = 4, B = 1; int size = sizeof(arr) / sizeof(arr[0]); cout<<"Count of numbers that can be reduced to zero or less in a game are: "<<reduced_zero(arr, size, A, B); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Count of numbers that can be reduced to zero or less in a game are: 7
-
C ++で数値のxorがゼロより大きくなるように、すべての行の数値を選択できるかどうかを確認します。
サイズNxMの2D配列が1つあるとします。タスクは、これらの要素のXORがゼロ以外または0より大きいように、すべての行から数値を選択できるかどうかを確認することです。1つの行列がこのように- 7 7 7 10 10 7 XORを実行すると、2つの行の最後の要素が7と10である場合を除いて、答えはゼロ以外になります。 この問題を解決するための解決策は非常に簡単です。最初に、各行の最初の列の要素のXORが0であるかどうかを確認します。ゼロ以外の場合は可能です。それ以外の場合は、いずれかの行に2つ以上の異なる要素があるかどうかを確認します。ある場合は、それ
-
C++でオーバーロードできない関数
C ++では、関数をオーバーロードできます。ただし、オーバーロードが行われない場合もあります。このセクションでは、関数をオーバーロードできないさまざまなケースについて説明します。 関数のシグネチャが同じである場合、戻り値のタイプのみが異なるため、関数をオーバーロードすることはできません。 int my_func() { return 5; } char my_func() { return 'd'; } メンバー関数がクラス内で同じ名前と同じパラメーターリストを持っている場合、それらをオーバーロードすることはで