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

Tạo một mảng phần tử riêng biệt với kích thước, tổng và giới hạn trên của phần tử đã cho trong Python


Giả sử chúng ta có một biến kích thước N, chúng ta cũng có một biến SUM, đây là tổng của tất cả các phần tử có trong mảng và một biến K khác sao cho không có phần tử nào trong mảng là lớn hơn K, Chúng ta phải tìm một mảng trực giao mà tất cả các phần tử trong mảng là khác biệt. Nếu không có giải pháp, trả về -1.

Vì vậy, nếu đầu vào là N =4, SUM =16 K =9, thì đầu ra sẽ là [1,2,4,9]

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

  • tối thiểu_sum:=(N * (N + 1)) / 2

  • max_sum:=(N * K) - (N * (N - 1)) / 2

  • nếu tối thiểu_sum> SUM hoặc tối đa_sum

    • trả về -1

  • res:=một mảng có kích thước N + 1 và điền từ 0 đến N

  • sum:=Minimum_sum

  • i:=N

  • while i> =1, do

    • x:=sum + (K - i)

    • nếu x

      • sum:=sum + (K - i)

      • res [i]:=K

      • K:=K - 1

    • nếu không,

      • res [i]:=res [i] + (SUM - tổng)

      • sum:=SUM

      • đi ra từ vòng lặp

    • i:=i - 1

  • trả lại res

Ví dụ

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

def get_arr(N, SUM, K):
   minimum_sum = (N * (N + 1)) / 2
   maximum_sum = (N * K) - (N * (N - 1)) / 2
   if (minimum_sum > SUM or maximum_sum < SUM):
      return -1
   res = [i for i in range(N + 1)]
   sum = minimum_sum
   i = N
   while(i >= 1):
      x = sum + (K - i)
      if (x < SUM):
         sum = sum + (K - i)
         res[i] = K
         K -= 1
      else:
         res[i] += (SUM - sum)
         sum = SUM
         break
         i -= 1
   return res
N = 4
SUM = 16
K = 9
print(get_arr(N, SUM, K))

Đầu vào

4, 16, 9

Đầu ra

[0, 1, 2, 4.0, 9]