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

C++で複数の合計を持つターゲット配列を構築する


ターゲットの整数の配列があるとします。すべて1で構成される開始配列Aから、次の手順を実行できます-

  • xを現在配列にあるすべての要素の合計と見なします。

  • 0からnの範囲でインデックスiを選択します。ここで、nは配列のサイズであり、インデックスiのAの値をxに設定します。

  • この手順は何度でも繰り返すことができます。

Aからターゲット配列を作成できるかどうかを確認する必要があります。そうでない場合はFalseを返します。

したがって、入力が[3,9,5]の場合、出力はTrueになります。これは、インデックス[1,1,1]から開始でき、インデックス0で合計が3、配列が[3 、1,1]の場合、インデックス2で合計が5になり、配列が[3,1,5]になり、インデックス1で合計が9になるため、配列は[3,9,5]になります。

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

  • 合計:=0

  • n:=ターゲットのサイズ

  • 初期化i:=0の場合、i

    • 合計:=合計+ターゲット[i]

  • 優先キューpqを定義し、ターゲット配列で初期化します

  • pq> sumの最上位要素である間、-

    • x:=pqの最上位要素

    • pqから要素を削除する

    • 2*x-合計をpqに挿入

    • 合計:=x

  • 合計がターゲットのサイズと同じ場合はtrueを返し、それ以外の場合はfalseを返します

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

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
   public:
   bool isPossible(vector<int>& target) {
      lli sum = 0;
      int n = target.size();
      for (int i = 0; i < n; i++) {
         sum += target[i];
      }
      priority_queue<int> pq(target.begin(), target.end());
      while (pq.top() * 2 > sum) {
         int x = pq.top();
         pq.pop();
         pq.push(2 * x - sum);
         sum = x;
      }
      return sum == (int)target.size();
   }
};
main(){
   Solution ob;
   vector<int> v = {3,9,5};
   cout << (ob.isPossible(v));
}

入力

{3,9,5}

出力

1

  1. C++合計配列パズル

    配列 同じデータ型の複数の要素を格納するデータ構造です。値のセット全体を一度に保存できます。ただし、その長さは事前に定義する必要があります。 この合計配列パズルでは、nと言う明確なサイズの配列A1が与えられます。このパズルを解くために、位置が使用されている要素を除く配列のすべての要素の合計を格納するS1という配列を作成します。たとえば、S1 [3]が計算されている場合、位置4の要素を除くA1のすべての要素の合計が求められます。 例- Array A1 = {1,2,3,4,6} Output S1 = {15,14,13,12,10} 説明 −合計配列を計算するには、初期配列の各要素を合計

  2. C ++の合計配列パズル?

    ここでは、配列に関連する1つの興味深い問題を確認します。 n個の要素を持つ配列があります。 n個の要素の別の配列を作成する必要があります。ただし、2番目の配列のi番目の位置は、i番目の要素を除く最初の配列のすべての要素の合計を保持します。そして、1つの制約は、この問題では減算演算子を使用できないことです。 減算演算を使用できれば、すべての要素の合計を取得し、最初の配列のi番目の要素を減算して、2番目の配列のi番目の場所に格納することで、この問題を簡単に解決できます。 ここでは、毎回要素を追加することでこれを解決し、0..n-1のiについては、位置iの要素を無視します。ポイントを得るためのア