Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาตัวเลขจากตัวหารใน C++


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