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

サブセットの要素の合計がC++でNで割り切れるような、N個の整数の配列で空でないサブセットを見つけます


n個の数の配列があるとします。サブセットの要素の合計がnで割り切れるような、空でないサブセットを見つける必要があります。そのため、そのようなサブセットを、元の配列に存在する場合は、そのサイズと要素のインデックスとともに出力する必要があります。

したがって、入力が[3、2、7、1、9]の場合、出力は[2]、[12]になります。

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

  • 1つのマップmy_mapを定義する
  • 追加:=0
  • iを初期化する場合:=0、i
  • add:=(add + arr [i])mod N
  • addが0と同じ場合、-
    • print i + 1
    • jを初期化する場合:=0、j <=iの場合、更新(jを1つ増やす)、実行-
      • print j + 1
    • 戻る
  • my_mapに追加する場合は、-
    • print(i --my_map [add])
    • jを初期化する場合:=my_map [add] + 1、j <=iの場合、更新(jを1つ増やす)、実行-
      • print j + 1
    • 戻る
  • それ以外の場合
    • my_map [add]:=i

例(C ++)

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

#include <bits/stdc++.h>
using namespace std;
void subset_find(int arr[], int N) {
   unordered_map<int, int> my_map;
   int add = 0;
   for (int i = 0; i < N; i++) {
      add = (add + arr[i]) % N;
      if (add == 0) {
         cout << i + 1 << endl;
         for (int j = 0; j <= i; j++)
            cout << j + 1 << " ";
         return;
      }
      if (my_map.find(add) != my_map.end()) {
         cout << (i - my_map[add]) << endl;
         for (int j = my_map[add] + 1; j <= i; j++)
            cout << j + 1 << " ";
         return;
      }
      else
         my_map[add] = i;
   }
}
int main() {
   int arr[] = {3, 2, 7, 1, 9};
   int N = sizeof(arr) / sizeof(arr[0]);
   subset_find(arr, N);
}

入力

{3, 2, 7, 1, 9}

出力

2
1 2

  1. C++で2つの要素が隣接しないような循環配列の最大合計

    この問題では、循環配列cirArr[]が与えられます。私たちのタスクは、C++で2つの要素が隣接しないように循環配列の最大合計を見つけるプログラムを作成することです。 問題の説明 循環配列の場合、隣接する要素を取得できないように、配列の要素の最大合計を見つける必要があります。つまり、代替要素を取得する必要があります。 循環アレイ は、配列の最後の要素が最初の要素に接続されている特殊なタイプの配列です。 問題を理解するために例を見てみましょう 入力 cirArr[] = {4, 1, 5, 3, 2} 出力 9 説明 最大合計循環サブシーケンスは[4、5、2]です。合計=9 ソリ

  2. C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します

    配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) {    bool pairAvilable = true;