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

ค้นหา d เพื่อเพิ่มจำนวนศูนย์สูงสุดในอาร์เรย์ c[] ที่สร้างเป็น c[i] =d*a[i] + b[i] ใน Python


สมมติว่าเรามีสองอาร์เรย์ A และ B ของจำนวนเต็ม n ตัว ตอนนี้ให้พิจารณาอาร์เรย์ C โดยที่ตัวเลขที่ i จะเป็น d*A[i] + B[i] และที่นี่ d คือจำนวนจริงใดๆ ตามอำเภอใจ เราต้องหา d ที่อาร์เรย์ C มีจำนวนศูนย์สูงสุด คืนค่าจำนวนศูนย์ด้วย

ดังนั้น หากอินพุตเป็น A =[15, 40, 45] และ B =[4, 5, 6] ผลลัพธ์จะเป็น d =-0.266666 จำนวนศูนย์จะเป็น 1

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

  • n :=ขนาดของ A

  • my_map :=แผนที่ใหม่

  • นับ :=0

  • สำหรับผมอยู่ในช่วง 0 ถึง n ทำ

    • ถ้า B[i] ไม่เหมือนกับ 0 และ A[i] ไม่เหมือนกับ 0 ดังนั้น

      • ค่า :=(-1.0 * B[i]) / A[i]

      • ถ้าวาลไม่ได้อยู่ใน my_map แล้ว

        • my_map[val] :=0

      • my_map[val] :=my_map[val] + 1

    • มิฉะนั้น เมื่อ B[i] เท่ากับ 0 และ A[i] เท่ากับ 0 ดังนั้น

      • นับ :=นับ + 1

  • สูงสุด :=0;

  • สำหรับแต่ละรายการใน my_map ให้ทำ

    • สูงสุด :=สูงสุดของ my_map[รายการ] สูงสุด

  • สำหรับแต่ละคีย์ ค่าใน my_map ทำ

    • ถ้าค่าเท่ากับค่าสูงสุดแล้ว

      • ปุ่มแสดงผล

      • ออกจากวง

  • แสดงผลสูงสุด + จำนวน

ตัวอย่าง (Python)

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

def find_d_zero(A, B) :
   n = len(A)
   my_map = {}
   count = 0
   for i in range(n) :
      if (B[i] != 0 and A[i] != 0) :
         val = (-1.0 * B[i]) / A[i]
         if val not in my_map :
            my_map[val] = 0
         my_map[val] += 1
      elif (B[i] == 0 and A[i] == 0) :
      count += 1
   maximum = 0;
   for item in my_map :
      maximum = max(my_map[item], maximum)
   for keys, values in my_map.items() :
      if (values == maximum) :
         print("d = ", keys)
         break
   print("Number of 0s: ", maximum + count)
a = [15, 40, 45]
b = [4, 5, 6]
find_d_zero(a, b)

อินพุต

[15, 40, 45], [4,5,6]

ผลลัพธ์

d = -0.26666666666666666
Number of 0s: 1