Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

รหัส C++ เพื่อค้นหาความสูงของต้นไม้หลังจาก n วัน


สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n A มีธาตุ 0 หรือ 1 มีต้นไม้ ใน n วันติดต่อกัน หาก A[i] เป็น 0 แสดงว่าไม่มีการรดน้ำ หากเป็น 1 ก็ถูกรดน้ำ ดอกไม้ก็จะเติบโตในลักษณะต่อไปนี้ −

  • ถ้าไม่รดน้ำต้นไม้สองวันติดก็ตาย

  • ถ้ารดน้ำต้นไม้จะโต 1 ซม.

  • หากรดน้ำต้นไม้ในวันที่ (i+1) ติดต่อกัน ต้นไม้จะเติบโต 5 ซม. แทนที่จะเป็น 1 ซม.

  • ถ้าไม่รดน้ำวันก็ไม่โต

ต้นนั้นยาว 1 ซม. เราต้องหาความสูงของต้นไม้หลังจากผ่านไป n วัน ถ้ามันตาย ให้คืนค่า -1.

ดังนั้น ถ้าอินพุตเป็น A =[0, 1, 1] ผลลัพธ์จะเป็น 7 เพราะในวันแรกมันจะไม่เติบโต ดังนั้น ความสูงคือ 1 หลังจากวันที่สอง ความสูงจะเป็น 2 หลังจากวันที่สาม มันจะเป็น 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