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

Chương trình phân phối số nguyên lặp lại trong Python

Giả sử chúng ta có một số mảng, có nhiều nhất 50 giá trị duy nhất. Chúng tôi cũng có một mảng khác được gọi là số lượng, trong đó số lượng [i] biểu thị số lượng giá trị mà khách hàng thứ i đã đặt hàng.

  • Khách hàng thứ i nhận được chính xác số lượng [i] mặt hàng,

  • Giá trị mà khách hàng thứ i nhận được đều bằng nhau và

  • Tất cả các khách hàng đều hài lòng.

Vì vậy, nếu đầu vào giống như nums =[5,1,2,2,3,4,4,3,3] số lượng =[2,2,3], thì đầu ra sẽ là Đúng vì hai khách hàng muốn hai phần tử mỗi thứ, vì vậy họ có thể nhận được [2,2] và [4,4], và người thứ ba muốn có ba vật phẩm, họ có thể nhận được [3,3,3], vì vậy tất cả đều hài lòng.

Để 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 dùng (). Điều này sẽ mất tôi, cntr

  • nếu tôi giống với kích thước của số lượng, thì

    • trả về True

  • temp_counter:=tạo một bản sao của cntr

  • đối với mỗi cnt trong cntr, thực hiện

    • nếu cnt> =số lượng [i], thì

      • temp_counter [cnt]:=temp_counter [cnt] - 1

      • nếu temp_counter [cnt] giống 0 thì

        • xóa phần tử cnt-th khỏi temp_counter

      • rem:=cnt - số lượng [i]

      • temp_counter [rem]:=temp_counter [rem] + 1

      • nếu use (i + 1, temp_counter) là true, thì

        • trả về True

      • temp_counter [rem]:=temp_counter [rem] - 1

      • nếu temp_counter [rem] bằng 0 thì

        • xóa phần tử thứ lại khỏi temp_counter

    • temp_counter [cnt]:=temp_counter [cnt] + 1

  • trả về Sai

  • Từ phương thức chính, hãy thực hiện như sau

  • cnt:=tần số giữ bản đồ của tất cả các tần số của các con số có trong nums

  • sắp xếp số lượng theo thứ tự ngược lại

  • trả về sử dụng (0, cnt)

Ví dụ

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

from collections import Counter
def solve(nums, quantity):
   def util(i, cntr):
      if i == len(quantity):
         return True

      temp_counter = cntr.copy()
      for cnt in cntr:
         if cnt >= quantity[i]:
            temp_counter[cnt] -= 1
            if temp_counter[cnt] == 0:
               temp_counter.pop(cnt)
         rem = cnt - quantity[i]
         temp_counter[rem] += 1

         if util(i+1, temp_counter):
            return True

         temp_counter[rem] -= 1
         if temp_counter[rem] == 0:
            temp_counter.pop(rem)
         temp_counter[cnt] += 1

      return False

   cnt = Counter(Counter(nums).values())
   quantity.sort(reverse=True)
   return util(0, cnt)

nums = [5,1,2,2,3,4,4,3,3]
quantity = [2,2,3]
print(solve(nums, quantity))

Đầu vào

[0,1,2,3,4], [[3,1],[1,3],[5,6]]

Đầu ra

True