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

C++でのNより小さい2進数の数


入力として整数Nが与えられます。目標は、N未満で、バイナリ形式で表される整数の数を見つけることです。たとえば、入力Nが12の場合、12未満の数値は2進数で、0と1を数字として含む1、10、11です。答えは3になります。

入力

N=100

出力

Count of Binary Digit numbers smaller than N are − 4

説明

The Binary numbers less than 100 are − 1, 10, 11, 100

入力

N=120

出力

Count of Binary Digit numbers smaller than N are: 7

説明

The Binary numbers less than 100 are : 1, 10, 11, 100, 101, 110, 111

以下のプログラムで使用されるアプローチは次のとおりです

このアプローチでは、整数ベクトルvecを使用します。これに最初に1をプッシュします。次の2進数を生成するために、vec(最初は1)から最後の数値(temp)を抽出します。次に、temp*10とtemp*10 + 1を使用して次を生成します。2進数は常に(1,10,11,100,110,111…。)になります。 vecから数字をポップし、それがNの増分カウントよりも小さい場合。

  • 入力として整数Nを取ります。

  • 関数Smaller_N(int N)はNを取り、Nより小さい2進数のカウントを返します。

  • 初期カウントを0とします。

  • 0と1のみを含む整数を格納するために整数ベクトルvecを取ります。

  • vec.push_back(1)を使用してベクトルに1を追加します。

  • whileループを使用して、vec []をトラバースし、最後にプッシュされたものをtemp =vec.back()として取り出し、vecから削除します。

  • temp <=Nの場合、カウントをインクリメントし、次の2進整数をtemp*10およびtemp*10 + 1として生成し、vecに追加します。

  • 結果として、whileリターンカウントの終わりに。

#include <bits/stdc++.h>
using namespace std;
int Smaller_N(int N){
   int count = 0;
   vector<int> vec;
   vec.push_back(1);
   while (!vec.empty()){
      int temp = vec.back();
      vec.pop_back();
      if (temp <= N){
         count++;
         int temp_2 = temp * 10;
         vec.push_back(temp_2);
         vec.push_back(temp_2 + 1);
      }
   }
   return count;
}
int main(){
   int N = 1000;
   cout<<"Count of Binary Digit numbers smaller than N are: "<<Smaller_N(N);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Count of Binary Digit numbers smaller than N are: 8

  1. C++で高さhのバランスの取れた二分木を数える

    二分木の高さHが与えられます。目標は、指定された高さのバランスの取れたバイナリツリーの数/数を見つけることです。 二分木 −は、各ノードに最大2つの子(左の子と右の子)を持つツリーデータ構造です。 高さバランスのとれた二分木 −は、すべてのノードの2つのサブツリーの深さが1または0だけ異なるバイナリツリーとして定義されます。これは、すべてのノードの左側のサブツリーと右側のサブツリーの高さであり、最大差は1です。 次の図には、高さh=3で可能な高さのバランスが取れた二分木が含まれています。 入力 Height H=2 出力 Count of Balanced Binary Trees

  2. N以下で、C++の合計がSである最小数

    問題の説明 1からNまでのN個の数とS個の数が与えられます。タスクは、合計してSを与える最小数の数を出力することです 例 n=7およびs=10の場合、最低2つの数字が必要です (9, 1) (8, 2) (7, 3) (6, 4) アルゴリズム Answer can be calculated using below formula (S/N) + 1 if { S %N > 0} 例 #include <bits/stdc++.h> using namespace std; int getMinNumbers(int n, int s) {    r