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

สร้างอาร์เรย์จาก GCD ขององค์ประกอบที่ต่อเนื่องกันในอาร์เรย์ที่กำหนดใน C++


สมมติว่าเรามีอาร์เรย์ A[] โดยมีองค์ประกอบ n รายการ เราต้องหาอาร์เรย์ B[] อื่นซึ่งมีขนาดเป็น n+1 ดังนั้น GCD ของ B[i] และ B[i + 1] คือ A[i] หากมีหลายวิธีแก้ปัญหา ให้พิมพ์หนึ่งในนั้นที่มีผลรวมอาร์เรย์น้อยที่สุด ดังนั้นหาก A =[1, 2, 3] ผลลัพธ์จะเป็น [1, 2, 6, 3]

เมื่อ A มีองค์ประกอบเพียงตัวเดียวให้พูดว่า K แล้ว B =[K, K] ดังนั้น B[0] จะเป็น A[0] ตอนนี้ พิจารณาว่าเราทำได้ถึงดัชนี i ดังนั้นเราจึงได้ประมวลผลดัชนี i และคำนวณ B[i + 1] แล้ว ตอนนี้ GCD ของ B[i + 1] และ B[i + 2] =A[i + 1] จากนั้น GCD ของ B[i + 2] และ B[i + 3] =A[i + 2] ดังนั้น B[i + 2]>=LCM ของ A[i + 1], A[i + 2] เมื่อเราต้องการผลรวมขั้นต่ำ เราก็อยากได้ค่าต่ำสุดของ B[i + 2] ดังนั้น B[i + 2] – LCM ของ A[i + 2] และ A[i + 3]

ตัวอย่าง

#include <iostream>
#include <algorithm>
using namespace std;
int getLCM(int a, int b) {
   return (a * b) / __gcd(a, b);
}
void gcdArray(int A[], int n) {
   cout << A[0] << " ";
   for (int i = 0; i < n - 1; i++)
   cout << getLCM(A[i], A[i + 1]) << " ";
   cout << A[n - 1];
}
int main() {
   int A[] = { 1, 2, 3 };
   int n = sizeof(A) / sizeof(A[0]);
   cout << "Constructed array: ";
   gcdArray(A, n);
}

ผลลัพธ์

Constructed array: 1 2 6 3