Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

किसी भी उपसमुच्चय के GCD के साथ सरणी दिए गए सरणी से संबंधित है?

यहां हम एक दिलचस्प समस्या देखेंगे। एन तत्वों का एक सेट है। हमें एक सरणी उत्पन्न करनी होगी जैसे कि उस सरणी के किसी भी सबसेट का GCD दिए गए तत्वों के सेट में हो। और एक और बाधा यह है कि उत्पन्न सरणी जीसीडी के सेट की लंबाई के तीन गुना से अधिक नहीं होनी चाहिए। उदाहरण के लिए, यदि 4 संख्याएँ {2, 4, 6, 12} हैं, तो एक सरणी {2, 2, 4, 2, 6, 2, 12}

होगी।

इस समस्या को हल करने के लिए, हमें पहले सूची को क्रमबद्ध करना होगा, फिर यदि GCD दिए गए सेट के न्यूनतम तत्व के समान है, तो प्रत्येक तत्व के बीच GCD लगाकर केवल सरणी बनाएं। अन्यथा, कोई सरणी नहीं बनाई जा सकती।

एल्गोरिदम

जनरेटअरे(arr, n)

Begin
   answer := empty array
   gcd := gcd of array arr
   if gcd is same as the min element of arr, then
      for each element e in arr, do
         append gcd into answer
         append e into answer
      done
      display answer
   else
      array cannot be formed
   end if
End

उदाहरण

#include<iostream>
#include<vector>
#include<set>
using namespace std;
int gcd(int a, int b) {
   if (a == 0)
      return b;
   return gcd(b % a, a);
}
int getGCDofArray(vector<int> arr) {
   int result = arr[0];
   for (int i = 1; i < arr.size(); i++)
      result = gcd(arr[i], result);
   return result;
}
void generateArray(vector<int> arr) {
   vector<int> answer;
   int GCD_of_array = getGCDofArray(arr);
   if(GCD_of_array == arr[0]) { //if gcd is same as minimum element
      answer.push_back(arr[0]);
      for(int i = 1; i < arr.size(); i++) { //push min before each
         element
         answer.push_back(arr[0]);
         answer.push_back(arr[i]);
      }
      for (int i = 0; i < answer.size(); i++)
      cout << answer[i] << " ";
   }
   else
   cout << "No array can be build";
}
int main() {
   int n = 4;
   int data[]= {2, 4, 6, 12};
   set<int> GCD(data, data + n);
   vector<int> arr;
   set<int>::iterator it;
   for(it = GCD.begin(); it!= GCD.end(); ++it)
      arr.push_back(*it);
   generateArray(arr);
}

आउटपुट

2 2 4 2 6 2 12

  1. C++ में दिए गए सरणी के तत्वों के भाज्य का GCD ज्ञात कीजिए

    मान लीजिए कि हमारे पास एन तत्वों के साथ एक सरणी ए है। हमें सरणी के सभी तत्वों के भाज्य का GCD ज्ञात करना है। मान लीजिए कि तत्व {3, 4, 8, 6} हैं, तो भाज्य का GCD 6 है। यहाँ हम ट्रिक देखेंगे। चूँकि दो संख्याओं का GCD वह सबसे बड़ी संख्या है, जो दोनों संख्याओं को विभाजित करती है, तो दो संख्याओं के भाज्य

  1. C++ में दिए गए GCD और LCM के साथ कोई भी युग्म ज्ञात कीजिए

    इस खंड में हम देखेंगे कि दिए गए GCD और LCM मानों का उपयोग करके जोड़े की संख्या कैसे प्राप्त करें। मान लीजिए कि GCD और LCM मान 2 और 12 हैं। अब संख्याओं के संभावित जोड़े (2, 12), (4, 6), (6, 4) और (12, 2) हैं। तो हमारा प्रोग्राम जोड़ियों की गिनती का पता लगाएगा। वह 4 है। इस समस्या को हल करने की तकनीक

  1. C++ में दिए गए भुजाओं वाले किसी भी त्रिभुज के परिवृत्त का क्षेत्रफल

    यहां हम यह देखेंगे कि किसी त्रिभुज के परिवृत्त का क्षेत्रफल कैसे ज्ञात किया जाता है, जिसकी भुजाएँ दी गई हैं। यहाँ भुजा AB a है, BC b है और CA c है, त्रिज्या r है। त्रिज्या r समान है - उदाहरण #include <iostream> #include <cmath> using namespace std; float area(float a, float b, float