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

n日後に木の高さを見つけるC++コード


n個の要素を持つ配列Aがあるとします。 Aには0または1の要素があります。ツリーがあります。連続したn日間、A [i]が0の場合は水を与えず、1の場合は水を与え、花は次のように成長します-

  • 木に2日間連続して水をやらないと、枯れてしまいます

  • 木が5日目に水をやると、1cm成長します

  • 木がi日目と(i + 1)日目に連続して水を与えられると、1cmではなく5cm成長します。

  • i日目に水をやらないと、成長しません。

当初、木の長さは1cmです。 n日後に木の高さを見つけなければなりません。死んだ場合は、-1を返します。

したがって、入力がA =[0、1、1]の場合、出力は7になります。これは、初日は成長しないため、高さは1で、2日目以降は2になります。 3日目以降は2+5=7になります。

ステップ

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

r := 1
y := 0
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   x := A[i]
   if r is same as -1, then:
      Ignore following part, skip to the next iteration
   if x is non-zero and y is non-zero, then:
      r := r + 5
   otherwise when x is non-zero, then:
      (increase r by 1)
   otherwise when not x is non-zero and not y is non-zero and i > 0, then:
      r := -1
   y := x
return r

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

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
   int r = 1;
   int y = 0;
   int n = A.size();
   for (int i = 0; i < n; ++i){
      int x = A[i];
      if (r == -1)
         continue;
      if (x && y)
         r += 5;
      else if (x)
         ++r;
      else if (!x && !y && i > 0)
         r = -1;
      y = x;
   }
   return r;
}
int main(){
   vector<int> A = { 0, 1, 1 };
   cout << solve(A) << endl;
}

入力

{ 0, 1, 1 }

出力

7

  1. C++でツリーの最大の深さまたは高さを見つけるプログラムを作成する

    この問題では、二分木が与えられます。私たちの仕事は、与えられた木の最大の深さまたは高さを見つけるプログラムを書くことです。 問題を理解するために例を見てみましょう 木の高さは3です。 ツリーの最大の高さを見つけるために、その左右のサブツリーの高さを確認し、両方の最大値に1を追加します。これは再帰的なプロセスであり、ツリーの最後のノードが検出され、サブツリーの高さを検出するために1つが段階的に追加されます。 上記の例は、この方法を使用して解決されました。 木の高さを見つける、つまり、height(3)=max(height(5)、height(7))+1。 このために、値5

  2. C++で左下のツリー値を検索

    二分木があるとします。そのツリーの最後の行の左端の値を見つける必要があります。したがって、ツリーが次のような場合- 最後の行が[7、4]であり、左端の要素が7であるため、出力は7になります。 これを解決するには、次の手順に従います- 最初にansとlvl変数を0として定義します solve()と呼ばれる1つのメソッドを定義します。これはツリーノードを取り、レベルは最初は0です。これは次のように機能します- ノードがnullの場合は、を返します。 lvlの場合、ans:=ノードの値およびlvl:=level 解決(ノードの左側、レベル+ 1)