ในปัญหานี้ เราได้รับตัวหารอาร์เรย์[] ซึ่งประกอบด้วยจำนวนเต็ม N ซึ่งเป็นตัวหารของจำนวน Num งานของเราคือการหาตัวเลขจากตัวหาร
อาร์เรย์ตัวหารไม่รวม 1 และตัวเลข
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
divisors[] = {3, 25, 5, 15}
ผลลัพธ์
75
คำอธิบาย
The number 75 has divisors {3, 25, 5, 15}
แนวทางการแก้ปัญหา
ในการแก้ปัญหา เราต้องหาตัวเลข Num โดยใช้ตัวหารที่เล็กที่สุดและใหญ่ที่สุดของตัวเลข
Num = smallest * largest
สำหรับสิ่งนี้ เราจำเป็นต้องจัดเรียงตัวหารอาร์เรย์[] แล้วค้นหาผลคูณขององค์ประกอบที่ดัชนีที่ 1 และดัชนีสุดท้ายของอาร์เรย์
สำหรับจำนวน ให้หาตัวประกอบทั้งหมดของจำนวนนั้น และตรวจสอบตัวหารของตัวเลขว่าเหมือนกับในอาร์เรย์ตัวหาร ถ้าใช่ ให้ส่งคืน Num มิฉะนั้น ให้คืนค่า -1 แสดงว่าไม่พบตัวเลข
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int findNumberFromDiv(int divisors[], int n){ sort(divisors, divisors + n); int num = divisors[0] * divisors[n - 1]; int numDiv[2*n]; int count = 0; for (int i = 2; i * i <= num; i++){ if (num % i == 0){ numDiv[count] = i; count ++ ; numDiv[count] = num/i; count++; } } sort(numDiv, numDiv + count); if (count != n) return -1; else{ for (int i = 0; i < count; i++) { if (divisors[i] != numDiv[i]) return -1; } } return num; } int main(){ int divisors[] = { 3, 25, 5, 15 }; int n = sizeof(divisors) / sizeof(divisors[0]); cout<<"The number is "<<findNumberFromDiv(divisors,n); return 0; }
ผลลัพธ์
The number is 75