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