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

หาค่า d เพื่อเพิ่มจำนวนศูนย์ในอาร์เรย์ c[i] = d*a[i] + b[i] ใน Python

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

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

ขั้นตอนการแก้ปัญหา

  1. นับขนาดของ A เป็น n
  2. สร้างแผนที่ my_map และตัวนับ count = 0
  3. วนลูป i จาก 0 ถึง n-1:
    • ถ้า B[i] != 0 และ A[i] != 0:
      • คำนวณ val = (-1.0 * B[i]) / A[i]
      • เพิ่มจำนวนใน my_map[val]
    • ถ้า B[i] == 0 และ A[i] == 0: เพิ่ม count
  4. หาค่า maximum ที่มากที่สุดใน my_map
  5. ค้นหาคีย์ที่มีค่าเท่ากับ maximum แล้วแสดงเป็น d
  6. แสดงผลรวม maximum + count เป็นจำนวนศูนย์

ตัวอย่างโค้ด 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