Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

そのサブセットのいずれかのGCDを持つアレイは、指定されたアレイに属しますか?


ここで、1つの興味深い問題が発生します。 N個の要素のセットがあります。その配列のサブセットのGCDが指定された要素のセットに含まれるように配列を生成する必要があります。また、もう1つの制約は、生成される配列がGCDのセットの長さの3倍を超えてはならないということです。たとえば、4つの数値{2、4、6、12}がある場合、1つの配列は{2、2、4、2、6、2、12}

になります。

この問題を解決するには、最初にリストを並べ替える必要があります。次に、GCDが指定されたセットの最小要素と同じである場合は、各要素の間にGCDを配置するだけで配列を作成します。そうしないと、アレイを形成できません。

アルゴリズム

generateArray(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とLCMのペアを検索します

    このセクションでは、指定されたGCD値とLCM値を使用してペアの数を取得する方法を説明します。 GCDとLCMの値が2と12であると仮定します。これで、可能な数値のペアは(2、12)、(4、6)、(6、4)、および(12、2)になります。したがって、私たちのプログラムはペアの数を見つけます。それは4です。 この問題を解決するための手法を理解するためのアルゴリズムを見てみましょう。 アルゴリズム countPairs(gcd, lcm): Begin    if lcm is nit divisible by gcd, then       r

  2. C++で指定された辺を持つ三角形の外接円の面積

    ここでは、辺が指定されている三角形の外接円の面積を取得する方法を説明します。ここで、辺ABはa、BCはb、CAはc、半径は「r」です。 半径rは-と同じです 例 #include <iostream> #include <cmath> using namespace std; float area(float a, float b, float c) {    if (a < 0 || b < 0 || c < 0) //if values are is negative it is invalid   &n