質問のバイナリ大規模なコレクションをプログラミングするマシン

タイトル説明

      1 
      \ /
    23
    / \ / \
  4 5 6 7
  / \ / \ / \ / \
、上記正の整数1、2、3、...無限の二分木を構成するに示すように。一つのノードからルートへ(ノード番号が1である)、例えば5からルート・ノード・パス(5、2、1)、ルート・ノードからのパスに4として、固有の経路を有しています経路(1)となるよう(4、2、1)、ルートノードにルートノードからの経路は、唯一つのノード1を含んでいます。ルートノードへの経路を想定つのノードxとyは、(X1、X2、...、1であるため ) 及び(Y1、Y2、...、1 )、 2つの正の整数が存在しなければなりませんiとj、最初から、そこXI = YJ、XI + 1 =ようxiとYJ YJ + 1、XI + 2 = YJ + 2、...
質問は今、xとy与え、彼らの公共の要件親、すなわちXI(すなわち、YJ)。

説明を入力します。

入力データは、複数組の、2つの正の整数xおよびy(1≤x、y≤2^ 31-1)を含むデータの各セットを含みます。

出力説明:

出力正の整数XI、即ちその第1の共通の親に対応するデータの各セット。
例1

エントリー

10 4

輸出

2 

アルゴリズムのアイデア:
完全二分木との間の関数関係は、親ノードの子ノード
コードは以下の通りであります:
// ここにコードを書く壁紙CPP 

// 得られた子ノードX、X / 2の親ノード、比較決意結果:完全なバイナリの性質 
の#include <iostreamの> 使用して名前空間; STD
 INT のmain()
{ int型、X、Y、
         しばらく(CIN >> X Y)
        { ながら(= X!Y)
                { / *   IF(X> Y)
                                X / = 2; 
                        他{ 
                                Y / 2 =; 
                        }オプティマイザ* / 
                        X > Y X = X? / 2:Y = Y / 2 ;
 
        
                
                       
                }
                coutの<< X << ENDL。
        } 
        
        
        戻り 0 
}
 
     

 


テスト結果:

 






おすすめ

転載: www.cnblogs.com/javabai/p/10993029.html