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

2の累乗とC++のサブシーケンス


この問題では、N個の整数の配列が与えられます。私たちのタスクは、要素が乗算された場合に2の累乗の数になるように形成できるサブシーケンスの数を見つけることです。

問題を理解するために例を見てみましょう

入力 − arr =[2、5、4]

出力 − 3

説明 −サブシーケンス[2]、[4]、および[2、4]は、望ましい結果をもたらします。

この問題を解決するには、力の論理を理解する必要があります。

2の累乗の数値のみが乗算され、目的の結果が得られます。したがって、それ自体が2の累乗である配列からのサブシーケンスのみを考慮する必要があります。

したがって、配列に2の累乗であるM個の要素がある場合、サブ配列の数は 2 M になります。 -1

ソリューションの実装を示すプログラム

#include <iostream>
#include <math.h>
using namespace std;
bool isPowerTwo(int num) {
   if (num == 0)
      return false;
   if (num == 1)
      return true;
   if (num & (num - 1))
      return false;
   return true;
}
int SubsequenceWithPowerTwo(int arr[], int N) {
   int count = 0;
   for (int i = 0; i < N; i++)
      if (isPowerTwo(arr[i]))
         count++;
   return (int)(pow(2, count)) - 1;
}
int main() {
   int arr[] = {5, 4, 8, 12, 32, 9 };
   int N = sizeof(arr)/sizeof(arr[0]);
   cout<<"No. of subsequences which multiply to a number which is a power of 2 are : ";
   cout<<SubsequenceWithPowerTwo(arr, N)<<endl;
   return 0;
}

出力

No. of subsequences which multiply to a number which is a power of 2 are : 7

  1. C++で重複する円と長方形

    (radius、xc、yc)として表される円があると仮定します。ここで、(xc、yc)は円の中心座標です。また、(x1、y1、x2、y2)として表される軸に沿った長方形があります。ここで、(x1、y1)は左下隅の座標であり、(x2、y2)は右上隅の座標です。長方形の角。円と長方形が重なっていないか確認する必要があります。 したがって、入力が次のような場合 そうすれば、出力は真になります。 これを解決するには、次の手順に従います- 関数eval()を定義します。これには、a、b、c、が必要です。 bの最大値とaとcの最小値を返します メインの方法から、次のようにしま

  2. C++でのDominoとTrominoのタイリング

    ドミノとトロミノの2種類の形状があるとします。以下のように回転させることができます- タイリングでは、すべての正方形をタイルで覆う必要があります。ここで、2つのタイルは、ボード上に2つの4方向に隣接するセルがあり、タイルの1つだけが両方の正方形をタイルで占めている場合にのみ異なります。 Nが与えられた場合、2xNボードをタイリングできる方法をいくつ見つける必要がありますか?したがって、入力が3の場合、出力は5になります。したがって、配置は[XYZ XXZ XYYXXYXYY]と[XYZYYZXZZ XYY XXY]になります。ここでは、タイルごとに異なる文字が使用されます。 これを