ในปัญหานี้ เราได้รับตัวหารอาร์เรย์[] ซึ่งประกอบด้วยจำนวนเต็ม 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