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

Diện tích bề mặt của hình dạng 3D trong Python

Giả sử có một lưới N x N, chúng ta đặt một số hình lập phương 1 x 1 x 1. trong đó. Bây giờ với mỗi giá trị v =grid [i] [j] đại diện cho một tháp gồm v hình khối được đặt trên đầu của ô lưới (i, j). Chúng ta phải tìm tổng diện tích bề mặt của các hình dạng thu được.

Vì vậy, nếu đầu vào là [[1,2], [3,4]], thì đầu ra sẽ là 34.

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

  • Định nghĩa một hàm lân cậnArea (). Điều này sẽ có hàng
  • khu vực:=0
  • đối với tôi trong phạm vi từ 0 đến kích thước của hàng - 1, thực hiện
    • nếu hàng [i] và hàng [i + 1] khác 0, thì
      • area:=area + 2 * tối thiểu của hàng [i], hàng [i + 1]
  • khu vực trả lại
  • Từ phương thức chính, hãy làm như sau -
  • z:=2 * (tổng của (tổng giá trị i trong hàng) cho tất cả hàng trong lưới)
  • x_plus_y:=tổng của tất cả các phần tử trong lưới * 4
  • x_adjacent:=tổng của Liền kềArea (hàng) cho tất cả hàng trong lưới
  • y_adjacent:=tổng của Liền kềArea (hàng) cho tất cả các cột trong lưới
  • return z + (x_plus_y - x_adjacent - y_adjacent)

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

Ví dụ

class Solution:
   def surfaceArea(self, grid):
      def adjacentArea(row):
         area = 0
         for i in range(len(row) - 1):
            if row[i] and row[i + 1]:
               area += 2 * min(row[i], row[i+1])
            return area
      z = sum([sum(i > 0 for i in row) for row in grid]) * 2
      x_plus_y = sum([sum(row) for row in grid]) * 4
      x_adjacent = sum([adjacentArea(row) for row in grid])
      y_adjacent = sum([adjacentArea(row) for row in zip(*grid)])
      return z + (x_plus_y - x_adjacent - y_adjacent)
ob = Solution()
print(ob.surfaceArea([[1,2],[3,4]]))

Đầu vào

[[1,2],[3,4]]

Đầu ra

34