สมมติว่าเรามีอาร์เรย์ที่มีตัวเลข n ตัว เราต้องคืนค่าจำนวนศูนย์ที่ต่อเนื่องกันในตอนท้ายหลังจากคูณตัวเลข n ทั้งหมดแล้ว
ดังนั้น หากอินพุตเป็น [200, 20, 5, 30, 40, 14] ผลลัพธ์จะเป็น 6 เท่า 200 * 20 * 5 * 30 * 40 * 14 =336000000 ท้ายสุดจะมี 0 วินาที
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน count_fact_two() นี่จะใช้เวลา n
-
นับ :=0
-
ในขณะที่ n mod 2 คือ 0 ทำ
-
นับ :=นับ + 1
-
n :=n / 2 (เฉพาะผลหารเป็นจำนวนเต็ม)
-
-
จำนวนคืน
-
กำหนดฟังก์ชัน count_fact_five() นี่จะใช้เวลา n
-
นับ :=0
-
ในขณะที่ n mod 5 คือ 0 ทำ
-
นับ :=นับ + 1
-
n :=n / 5 (เฉพาะผลหารเป็นจำนวนเต็ม)
-
-
จำนวนคืน
-
จากวิธีหลัก ให้ทำดังนี้ −
-
n :=ขนาดของ A
-
สอง :=0, ห้า :=0
-
สำหรับผมอยู่ในช่วง 0 ถึง n ทำ
-
twos :=twos + count_fact_two(A[i])
-
ห้า :=ห้า + count_fact_five(A[i])
-
-
ถ้า twos − fives แล้ว
-
กลับสอง
-
-
มิฉะนั้น
-
คืนห้า
-
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def count_fact_two( n ): count = 0 while n % 2 == 0: count+=1 n = n // 2 return count def count_fact_five( n ): count = 0 while n % 5 == 0: count += 1 n = n // 5 return count def get_consecutive_zeros(A): n = len(A) twos = 0 fives = 0 for i in range(n): twos += count_fact_two(A[i]) fives += count_fact_five(A[i]) if twos < fives: return twos else: return fives A = [200, 20, 5, 30, 40, 14] print(get_consecutive_zeros(A))
อินพุต
[200, 20, 5, 30, 40, 14]
ผลลัพธ์
6