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

จำนวนการดำเนินการเพื่อทำให้สมาชิกอาร์เรย์เท่ากันทั้งหมดใน Python

เรามีอาร์เรย์ของสมาชิก และต้องทำให้ทุกตัวเท่ากันโดยเพิ่มค่าสมาชิกทีละ 1 เราได้รับอนุญาตให้เพิ่ม n-1 สมาชิกในแต่ละขั้นตอน เป้าหมายคือคำนวณจำนวนการดำเนินการทั้งหมดที่ต้องใช้เพื่อทำให้สมาชิกอาร์เรย์ทั้งหมดเท่ากัน

ตัวอย่าง ถ้ามีลิสต์ [1, 2, 3] ใช้ 3 การดำเนินการเพื่อทำให้ทุกสมาชิกเท่ากัน วิธีแก้หนึ่งคือ หาตัวเลขสูงสุดในแต่ละขั้นตอนและเพิ่มสมาชิกที่เหลือทีละ 1 มาเขียนโค้ดกัน

ตัวอย่าง

def main():
    # เริ่มต้นอาร์เรย์
    arr = [1, 2, 3]
    # เริ่มต้นนับการดำเนินการ
    no_of_operations = 0
    flag = 0
    # ดำเนินการกับอาร์เรย์จนกว่าจะเท่ากัน
    while not are_equal(arr):
        flag = 1
        # หาค่าสูงสุดจากลิสต์
        maximum = max(arr)
        # เพิ่มสมาชิกทั้งหมดยกเว้นค่าสูงสุด
        for i in range(len(arr)):
            if arr[i] != maximum:
                arr[i] += 1
        # เพิ่มจำนวนการดำเนินการ
        no_of_operations += 1
    print(no_of_operations) if flag == 0 else print(no_of_operations + 1)

# ตรวจสอบว่าสมาชิกทั้งหมดเท่ากันหรือไม่
def are_equal(arr):
    global no_of_operations
    for i in range(len(arr) - 1):
        if arr[i] != arr[i + 1]:
            return False
    return True

if __name__ == '__main__':
    main()

ผลลัพธ์

ถ้ารันโปรแกรมข้างต้น จะได้ผลลัพธ์ดังนี้:

3

วิธีด้านบนใช้เวลานานสำหรับอาร์เรย์ขนาดใหญ่ เราสามารถหาจำนวนการดำเนินการได้โดยหาผลรวมและสมาชิกน้อยที่สุดของอาร์เรย์

  • หาผลรวมของอาร์เรย์
  • หาสมาชิกน้อยที่สุดของอาร์เรย์
  • พิมพ์ค่าจากนิพจน์ sum - (length * smallest)

ตัวอย่าง

ดูโค้ดด้านล่าง

# เริ่มต้นอาร์เรย์
arr = [1, 2, 3]
# ความยาว
length = len(arr)
# ผลรวมของสมาชิกอาร์เรย์
elements_sum = sum(arr)
# สมาชิกน้อยที่สุด
smallest = min(arr)
# คำนวณจำนวนการดำเนินการ
print(elements_sum - (length * smallest))

ผลลัพธ์

ถ้ารันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้:

3

สรุป

วิธีที่สองที่เราอภิปรายง่ายกว่าและใช้เวลาน้อยกว่าวิธีแรกมาก หากมีข้อสงสัยในบทช่วยสอน กรุณาเขียนในส่วนความคิดเห็น