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

สร้างอาร์เรย์องค์ประกอบที่แตกต่างกันโดยกำหนดขนาด ผลรวม และขอบเขตบนขององค์ประกอบใน Python


สมมติว่าเรามีตัวแปรขนาดหนึ่ง N เราก็มี SUM ตัวแปรหนึ่งตัว นี่คือผลรวมขององค์ประกอบทั้งหมดที่มีอยู่ในอาร์เรย์ และตัวแปรอื่น K ที่ไม่มีองค์ประกอบในอาร์เรย์คือ มากกว่า K เราต้องหาอาร์เรย์มุมฉากหนึ่งอาร์เรย์ที่องค์ประกอบทั้งหมดในอาร์เรย์มีความแตกต่างกัน หากไม่มีวิธีแก้ปัญหา ให้คืนค่า -1

ดังนั้น หากอินพุตเป็น N =4, SUM =16 K =9 เอาต์พุตจะเป็น [1,2,4,9]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • maximum_sum :=(N *(N + 1)) / 2

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

  • ถ้า maximum_sum> SUM หรือ maximum_sum

    • กลับ -1

  • res :=หนึ่งอาร์เรย์ขนาด N + 1 และเติม 0 ถึง N

  • ผลรวม :=ขั้นต่ำ_sum

  • ฉัน :=ไม่

  • ในขณะที่ i>=1 ทำ

    • x :=ผลรวม + (K - i)

    • ถ้า x

      • sum :=sum +(K - i)

      • res[i] :=K

      • K :=K - 1

    • มิฉะนั้น

      • res[i] :=res[i] +(SUM - ผลรวม)

      • ผลรวม :=SUM

      • ออกจากวง

    • ผม :=ผม - 1

  • ผลตอบแทน

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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))

อินพุต

4, 16, 9

ผลลัพธ์

[0, 1, 2, 4.0, 9]