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

Có thể đặt hoa trong C ++

Giả sử chúng ta có một thảm hoa dài, trong đó một số ô được trồng và một số ô trống. Bây giờ có một hạn chế, hoa không thể được trồng trong các mảnh đất liền kề, chúng sẽ cạnh tranh để lấy nước và cả hai sẽ chết. Vì vậy, nếu chúng ta có một thảm hoa, được biểu diễn bằng một mảng chứa 0 và 1, 0 cho biết trống và 1 cho biết điền, và một số n cũng được cho, chúng ta phải kiểm tra xem n bông hoa mới có thể được trồng vào đó mà không vi phạm điều- quy tắc hoa liền kề hay không.

Vì vậy, nếu đầu vào giống như Flowerbed =[1,0,0,0,1], n =1, thì đầu ra sẽ là True

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

  • nếu kích thước của thảm hoa

    • trả về false

  • nếu kích thước của thảm hoa bằng 1 và thảm hoa [0] bằng 0 và n bằng 1, thì -

    • trả về true

  • để khởi tạo i:=0, khi i

    • nếu n> 0, thì -

      • nếu tôi giống 0, thì -

        • nếu Flowerbed [i] giống 0 và flowerbed [1] giống 0, thì -

          • thảm hoa [0]:=1

          • (giảm n đi 1)

      • ngược lại khi tôi bằng với kích thước của thảm hoa - 1, thì -

        • nếu Flowerbed [i] bằng 0 và Flowerbed [i - 1] không bằng 1, thì -

          • thảm hoa [i]:=1

          • (giảm n đi 1)

      • ngược lại khi Flowerbed [i] giống 0 và flowerbed [i + 1] giống 0 và flowerbed [i - 1] giống 0, thì -

        • thảm hoa [i]:=1

        • (giảm n đi 1)

    • nếu n giống 0 thì -

      • trả về true

  • nếu n giống 0 thì -

    • trả về true

  • trả về false

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;
class Solution {
public:
   bool canPlaceFlowers(vector<int>& flowerbed, int n) {
      if (flowerbed.size() < n)
         return false;
      if (flowerbed.size() == 1 && flowerbed[0] == 0 && n == 1)
         return true;
      for (int i = 0; i < flowerbed.size(); i++) {
         if (n > 0) {
            if (i == 0) {
               if (flowerbed[i] == 0 && flowerbed[1] == 0) {
                  flowerbed[0] = 1;
                  n--;
               }
            }
            else if (i == flowerbed.size() - 1) {
               if (flowerbed[i] == 0 && flowerbed[i - 1] != 1) {
                  flowerbed[i] = 1;
                  n--;
               }
            }
            else if (flowerbed[i] == 0 && flowerbed[i + 1] == 0 && flowerbed[i - 1] == 0) {
flowerbed[i] = 1;
               n--;
            }
         }
         if (n == 0) {
            return true;
         }
      }
      if (n == 0) {
         return true;
      }
      return false;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,0,0,0,1};
   cout << (ob.canPlaceFlowers(v, 1));
}

Đầu vào

{1,0,0,0,1}, 1

Đầu ra

1