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

C++で指定された配列内の連続する要素のGCDから配列を構築します


n個の要素を持つ配列A[]があるとします。 B[i]とB[i+1]のGCDがA[i]であるように、サイズがn+1である別の配列B[]を見つける必要があります。複数のソリューションがある場合は、配列の合計が最小であるソリューションの1つを出力します。したがって、A =[1、2、3]の場合、出力は[1、2、6、3]

になります。

AにKと言う要素が1つしかない場合、B =[K、K]。したがって、B[0]はA[0]になります。ここで、インデックスiまで完了したと考えてください。これで、インデックスiがすでに処理され、B [i+1]が計算されています。ここで、B [i+1]およびB[i+ 2] =A [i + 1]のGCD、次にB [i+2]およびB[i+ 3] =A [i+2]のGCDです。したがって、B [i + 2]> =A [i + 1]、A [i+2]のLCM。最小の合計が必要なので、B [i + 2]の最小値を取得する必要があるため、B [i + 2] – A [i+2]とA[i+ 3]

のLCM

#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

  1. C++プログラムで特定の配列からリンクリストを作成する

    このチュートリアルでは、指定された配列からリンクリストを作成する方法を学習します。 問題を解決するための手順を見てみましょう。 ダミーデータでアレイを初期化します。 構造体ノードを記述します。 アレイを繰り返し処理します。 データを使用して新しいノードを作成します。 リンクリストに新しいノードを挿入します。 リンクリストを印刷します。 例 コードを見てみましょう。 #include <bits/stdc++.h> using namespace std; struct Node {    int data; &nb

  2. C++で指定された順序トラバーサルから特別な二分木を構築します

    二分木の順序通りの走査を含む配列arr[]が与えられます。目標は、その配列から特別な二分木を構築することです。特別な二分木とは、ルートノードの重みが左右両方の子の重みよりも大きいものです。 例 入力 int arr[] = {10, 20, 28, 40, 32, 31, 30} 出力 与えられた順序トラバーサルで構築される特別な二分木を以下に示します- 説明 we are given with an array of integer values or the inorder traversal of a tree. So, the special tree formed is