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

โปรแกรมตรวจสอบคู่อาร์เรย์ว่าหารด้วย k ลงตัวหรือไม่โดยใช้ Python


สมมติว่าเรามีอาร์เรย์ที่เรียกว่า nums อาร์เรย์นี้มีจำนวนองค์ประกอบที่เป็นคู่ และมีค่าอื่น k เราต้องแยก nums ออกเป็นคู่ n/2 ตรง ๆ เพื่อให้ผลรวมของแต่ละคู่หารด้วย k ลงตัว หากเราทำได้ก็คืนค่าจริงหรือเท็จ

ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[9,5,3,4,7,10,20,8] k =3 ผลลัพธ์จะเป็น True เพราะเราสามารถสร้างคู่เช่น (9,3), (5 ,7), (4,20), (8,10) ผลรวมของทุกคู่หารด้วย 3 ลงตัว

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

  • dp :=รายการใหม่

  • จำนวน:=0

  • สำหรับแต่ละ x เป็นตัวเลข ทำ

    • t:=k - (x mod k)

    • ถ้า t เหมือนกับ k แล้ว

      • นับ :=นับ + 1

    • มิฉะนั้น

      • ใส่ t ต่อท้าย dp

  • หากการนับ mod 2 ไม่เหมือนกับ 0 แล้ว

    • คืนค่าเท็จ

  • เรียงลำดับรายการ dp

  • ต่ำ :=0

  • สูง :=ขนาด dp - 1

  • ในขณะที่ต่ำ <สูง ทำ

    • ถ้า dp[low] + dp[high] ไม่เหมือนกับ k แล้ว

      • คืนค่าเท็จ

    • ต่ำ :=ต่ำ + 1

    • สูง :=สูง - 1

  • คืนค่า True

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

ตัวอย่าง

def solve(nums, k):
   dp=[]
   count=0
   for x in nums:
      t=k-(x % k)
      if t == k:
         count+=1
      else:
         dp.append(t)
   if count % 2 != 0:
      return False
   dp.sort()
   low = 0
   high = len(dp)-1
   while low < high:
      if dp[low] + dp[high] != k:
         return False
      low += 1
      high -= 1
   return True
nums = [9,5,3,4,7,10,20,8]
k = 3
print(solve(nums, k))

อินพุต

[9,5,3,4,7,10,20,8], 3

ผลลัพธ์

True