เราได้รับอาร์เรย์ Arr[] ของจำนวนเต็มบวกขนาด N เป้าหมายคือการนับจำนวนศูนย์ต่อท้ายที่มีอยู่ในผลคูณขององค์ประกอบทั้งหมดของอาร์เรย์
เราจะทำได้โดยการนับตัวประกอบของตัวเลขแต่ละตัว เราจะนับ 2 และ 5 เป็นปัจจัยของแต่ละตัวเลขเนื่องจากผลคูณของ 2 และ 5 คือ 10 ซึ่งให้ 1 ต่อท้าย 0 ในที่สุดแล้วแต่จำนวนใดที่น้อยกว่าจะนับศูนย์ต่อท้ายในผลิตภัณฑ์ ถ้าเรามี 4 2 และ 6 5 แล้ว จะมี 4 ศูนย์ต่อท้ายในผลิตภัณฑ์ − 2*2*2*2*5*5*5*5*5*5=250000
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล
Arr[] = { 2, 5, 10, 15, 20, 25, 100 }
ผลผลิต
Number of trailing zeroes : 6
คำอธิบาย
Factors 2 and 5 of each element of Arr[]: Arr[0] = 2 : 2 twos=1, fives=0 Arr[1] = 5 : 5 twos=1, fives=1 Arr[2] = 10 : 2*5 twos=2, fives=2 Arr[3] = 15 : 3*5 twos=2, fives=3 Arr[4] = 20 : 2*2*5 twos=4, fives=4 Arr[5] = 25 : 5*5 twos=4, fives=6 Arr[6] = 100 : 2*2*5*5 twos=6, fives=8 Count of 2 is less so trailing zeroes will be 6.
ป้อนข้อมูล
Arr[] = { 10,10,10,10,10 }
ผลผลิต
Number of trailing zeroes : 5
คำอธิบาย
Factors 2 and 5 of each element of Arr[]: Arr[0] = 10 : 2*5 twos=1, fives=1 Arr[1] = 10 : 2*5 twos=2, fives=2 Arr[2] = 10 : 2*5 twos=3, fives=3 Arr[3] = 10 : 3*5 twos=4, fives=4 Arr[4] = 10 : 2*5 twos=5, fives=5 Count of 2 and 5 is equal so trailing zeroes will be 5.
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราใช้อาร์เรย์ของจำนวนเต็มบวกที่มีความยาว N..
-
ฟังก์ชัน trailZeros(int arr[],int n) รับอาร์เรย์และ n เป็นอินพุตและส่งกลับจำนวนศูนย์ต่อท้ายในผลคูณขององค์ประกอบทั้งหมด
-
ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับจำนวนศูนย์
-
นำตัวแปร 2 ตัว 2 และ 5 มานับเป็น 2 และ 5 เป็นตัวประกอบ
-
Traverse array ใช้ for วนซ้ำ
-
สำหรับแต่ละองค์ประกอบหากหารด้วย 2 หรือ 5 ลงตัว ให้เพิ่มสองและห้าและลดด้วย 2 หรือ 5
-
ในตอนท้ายของ for loop ตรวจสอบค่าของ twos และ fives แล้วแต่จำนวนใดจะน้อยกว่า
-
เริ่มต้นการนับด้วยค่าที่ต่ำกว่าของทั้งสอง
-
คืนค่าการนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h< using namespace std; int trailZeros(int arr[],int n){ int count = 0; int twos = 0; int fives = 0; for (int i = 0; i < n; i++){ while(arr[i]%2==0 || arr[i]%5==0){ if(arr[i]%2==0){ arr[i]=arr[i]/2; twos++; } if(arr[i]%5==0){ arr[i]=arr[i]/5; fives++; } } } count=twos<fives?twos:fives; return count; } int main(){ int Arr[]={ 12, 5 , 15, 8, 100, 40 }; int Length= sizeof(Arr)/sizeof(Arr[0]); cout <<endl<< "Number of trailing zeroes : "<<trailZeros(Arr,Length); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Number of trailing zeroes : 5