Computer >> Máy Tính >  >> Lập trình >> C ++

Mã C ++ để tìm chiều cao cây sau n ngày

Giả sử chúng ta có một mảng A với n phần tử. A có các phần tử 0 hoặc 1. Có một cây. Trong n ngày liên tiếp, nếu A [i] là 0 thì không được tưới, nếu là 1 thì tưới, hoa sẽ mọc theo cách sau -

  • Nếu không được tưới nước trong hai ngày liên tiếp cây sẽ chết

  • Nếu tưới vào ngày thứ i, cây sẽ mọc được 1 cm

  • Nếu cây được tưới vào ngày thứ i và (i + 1) liên tục, cây sẽ phát triển 5 cm thay vì 1 cm.

  • Nếu nó không được tưới vào ngày thứ i, nó sẽ không phát triển.

Lúc đầu cây dài 1cm. Chúng ta phải tìm chiều cao của cây sau n ngày. Nếu nó chết, hãy trả về -1.

Vì vậy, nếu đầu vào là A =[0, 1, 1], thì đầu ra sẽ là 7, vì ngày đầu tiên, nó sẽ không phát triển nên chiều cao là 1, sau ngày thứ hai, chiều cao sẽ là 2, thì sau ngày thứ ba, nó sẽ là 2 + 5 =7.

Các bước

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

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

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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;
}

Đầu vào

{ 0, 1, 1 }

Đầu ra

7