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

C ++でそれらの合計がMで割り切れるように符号を変更して、N個の要素のすべての組み合わせを出力します。


この問題では、N個の要素の配列が与えられます。そして、要素のすべての合計を返す必要があります。整数Mで割り切れます。

Input : array = {4, 7, 3} ; M = 3
Output : 5+4+3 ; 5+4-3

この問題を解決するには、得られるすべての可能な合計を見つけるために使用できるべき集合の概念を知る必要があります。この合計から、Mで割り切れるすべてのものを印刷します。

アルゴリズム

Step 1: Iterate overall combinations of ‘+’ and ‘-’ using power set.
Step 2: If the sum combination is divisible by M, print them with signs.

#include <iostream>
using namespace std;
void printDivisibleSum(int a[], int n, int m){
   for (int i = 0; i < (1 << n); i++) {
      int sum = 0;
      int num = 1 << (n - 1);
      for (int j = 0; j < n; j++) {
         if (i & num)
            sum += a[j];
         else
            sum += (-1 * a[j]);
         num = num >> 1;
      }
      if (sum % m == 0) {
         num = 1 << (n - 1);
         for (int j = 0; j < n; j++) {
            if ((i & num))
               cout << "+ " << a[j] << " ";
            else
               cout << "- " << a[j] << " ";
            num = num >> 1;
         }
         cout << endl;
      }
   }
}
int main(){
   int arr[] = {4,7,3};
   int n = sizeof(arr) / sizeof(arr[0]);
   int m = 3;
   cout<<"The sum combination divisible by n :\n";
   printDivisibleSum(arr, n, m);
   return 0;
}

出力

合計の組み合わせはnで割り切れる-

- 4 + 7 - 3
- 4 + 7 + 3
+ 4 - 7 - 3
+ 4 - 7 + 3

  1. C++の無向グラフの連結成分すべての最小要素の合計

    この問題では、arr [i]が(i + 1)番目のノードを表すN個の数値の配列arrが与えられます。また、エッジのMペアがあり、uとvはエッジによって接続されたノードを表します。私たちのタスクは、無向グラフのすべての連結成分の最小要素の合計を見つけるプログラムを作成することです。ノードが他のノードに接続されていない場合は、1つのノードを持つコンポーネントとしてカウントします。 問題を理解するために例を見てみましょう 入力 arr[] = {2, 7, 5, 1, 2} m = 2 1 2 4 5 出力 8 説明 以下は上に描かれたグラフです- 2つの接続されたノードと1

  2. C ++の配列のすべての要素にXOR演算を適用して、配列の合計を最小化する

    説明 サイズの配列が与えられた場合、N。Xと配列の各要素を使用してXOR演算を実行するときに、配列要素の合計が最小になるように要素Xを見つけます。 If input array is: arr [] = {8, 5, 7, 6, 9} then minimum sum will be 30 Binary representation of array elments are: 8 : 1000 5 : 0101 7 : 0111 6 : 0101 9 : 1001 If X = 5 then after performing XOR sum will be 30: 8 ^ 5 = 13 5