配列サイズの半分を超える除算要素の後の数値をカウントするC++コード
n個の要素を持つ配列Aがあるとします。配列内の各数値をdで除算した後、配列に表示される正の値の数が配列サイズの半分以上になるように、ゼロ以外の整数dを見つける必要があります。 。条件を満たすdの値が複数ある場合。複数の回答がある場合は、そのうちの1つを返します。
したがって、入力がA =[10、0、-7、2、6]の場合、出力は4になります。これは、ここではn =5であるため、少なくとも$ \ mathrm {\ left \ lceil5/が必要です。分割後の2\right \ rceil =3}$要素。 d =4の場合、除算後の配列は[2.5、0、-1.75、0.5、1.5]になり、2.5、0.5、1.5の3つの正の数があります。
ステップ
これを解決するには、次の手順に従います-
z := 0, f := 0 n := size of A for initialize i := 0, when i < n, update (increase i by 1), do: a := A[i] if a > 0, then: (increase z by 1) if a < 0, then: (increase f by 1) if 2 * z >= n, then: return 1 otherwise when 2 * f >= n, then: return -1 Otherwise return 0
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A){ int z = 0, f = 0; int n = A.size(); for (int i = 0; i < n; i++){ int a = A[i]; if (a > 0) z++; if (a < 0) f++; } if (2 * z >= n) return 1; else if (2 * f >= n) return -1; else return 0; } int main(){ vector<int> A = { 10, 0, -7, 2, 6 }; cout << solve(A) << endl; }
入力
{ 10, 0, -7, 2, 6 }
出力
1
-
C++で指定された数まで配列要素を最大化します
問題の説明 整数、数値、および最大値の配列が与えられた場合、タスクは配列要素から取得できる最大値を計算することです。最初からトラバースする配列のすべての値は、前のインデックスから取得した結果に加算または減算して、任意の時点で結果が0以上、指定された最大値以下になるようにすることができます。インデックス0の場合、指定された数に等しい前の結果を取得します。可能な回答がない場合は-1を印刷します。 arr [] ={3、10、6、4、5}、数値=1、最大値=15の場合、加算と減算の順序に従うと、出力は9になります- 1 + 3 + 10 – 6 – 4 + 5 アルゴリズ
-
C ++では、すべての要素がk以上になるまで配列の要素を追加します。
配列 −配列は、同じデータ型の要素のコンテナであり、その要素のインデックスは0です。 この問題では、整数の配列を使用します。そして、すべての要素が指定された数より大きいかどうかを確認します。ここでは、配列のすべての要素が指定された数k以上であるかどうかを確認します。そうでない場合は、配列の2つの最小要素を追加し、この合計を1つの要素として扱います。次に、新しいアレイの同じ条件を再度確認します。条件が真であることが判明した場合、合計が実行された回数が返されます。 Array = { 2, 6,3,12, 7} K = 5 Output : 1 説明 −最初に、すべての要素がkより大きいかどう