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

C++の文法のK番目の記号


最初の行に0があるとします。後続のすべての行で、前の行を見て、0の各出現を01に、1の各出現を10に置き換えます。N行とインデックスKがあると仮定します。行NでK番目のインデックス付きシンボルを見つける必要があります(Kの値は1インデックスです)(1インデックス)。したがって、N=4およびK=5の場合、出力は1になります。これは-

  • 行1:0
  • 行2:01
  • 行3:0110
  • 行4:01101001

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

  • メソッドの名前がkthGrammarであるとします。これにはNとKが必要です。
  • Nが1の場合、0を返します
  • kが偶数の場合、kthGrammar(N – 1、K / 2)が0の場合は1を返し、それ以外の場合は0を返します
  • それ以外の場合は、kthGrammar(N – 1、(K + 1)/ 2)を返します

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int kthGrammar(int N, int K) {
      if(N == 1) return 0;
      if(K % 2 == 0){
      return kthGrammar(N - 1, K / 2) == 0 ? 1 : 0;
      }else{
         return kthGrammar(N - 1, (K + 1) / 2);
      }
   }
};
main(){
   Solution ob;
   cout << (ob.kthGrammar(4, 5));
}

入力

4
5

出力

1

  1. C++で文字列として表されるツリーのk番目のレベルのノードの積

    文字列形式のデータを持つノードのツリーで与えられ、タスクは、バイナリツリーのk番目のレベルでノードの積を見つけることです。ツリーのすべてのノードには、データ部分、左サブツリーの左ポインタ、右サブツリーの右ポインタの3つが含まれています。 二分木のレベルは0から始まり、任意の正の数である「n」まで続くことができます。したがって、レベル「k」が与えられ、プログラムは与えられた「k」レベルでノードの積を計算する必要があります。 二分木で、k=2の値が与えられたとしましょう したがって、レベル2のノードは-40、50、60です。 製品=40* 50 * 60 =1,20,000 入力

  2. C ++での「&」記号の使用法は何ですか?

    &記号はC++で演算子として使用されます。これは2つの異なる場所で使用されます。1つはビット単位の演算子として、もう1つは演算子のポインタアドレスとして使用されます。 ビットごとのAND ビットごとのAND演算子(&)は、第1オペランドの各ビットを第2オペランドのそのビットと比較します。両方のビットが1の場合、ビットは1に設定されます。それ以外の場合、ビットは0に設定されます。ビット単位のAND演算子の両方のオペランドは、整数型である必要があります。 例 #include <iostream>   using namespace std;   int mai