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

C++で可能なすべてのサブアレイの中で可能な最小LCMおよびGCD


サイズNの配列arrがあるとします。これにはN個の正の数があります。考えられるすべてのサブアレイの最小要素を見つける必要があります。アレイが{2、66、14、521}であり、最小LCMが2、GCDが1であるとします。

貪欲なアプローチを使用してこの問題を解決します。要素の数を減らすとLCMが少なくなり、配列サイズを増やすとGCDが少なくなります。配列から最小の要素を見つける必要があります。これは単一の要素であり、LCMが必要になります。 GCDの場合、GCDはアレイのすべての要素のGCDになります。

#include <iostream>
#include <algorithm>
using namespace std;
int minimum_gcd(int arr[], int n) {
   int GCD = 0;
   for (int i = 0; i < n; i++)
   GCD = __gcd(GCD, arr[i]);
   return GCD;
}
int minimum_lcm(int arr[], int n) {
   int LCM = arr[0];
   for (int i = 1; i < n; i++)
   LCM = min(LCM, arr[i]);
   return LCM;
}
int main() {
   int arr[] = { 2, 66, 14, 521 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "LCM: " << minimum_lcm(arr, n) << ", GCD: " << minimum_gcd(arr, n);
}

出力

LCM: 2, GCD: 1

  1. 最小数C++のツリー内のすべてのノードに情報を渡すための反復回数

    「n」個のノードを持つツリーデータ構造が与えられます。指定されたツリーにはルートノードとそれぞれの子があり、それぞれの子は任意の数であり、さらに子は任意の数の子を持つことができます。タスクは、ツリーのルートノードがツリー内のすべてのノードに情報を渡すために必要な最小反復回数を見つけることです。一度に、ノードはその子の1つに情報を渡すことができ、さらにその子の1つはその子の1つに情報を渡すことができ、その間、ルートノードは別の子に情報を渡すことができます。 このためのさまざまな入出力シナリオを見てみましょう- で- アウト- 最小数ツリー内のすべてのノードに情報を渡すための反復回数

  2. C++でツリー内のすべてのリンゴを収集するための最小時間

    n個の頂点で構成される無向ツリーがあり、これらの番号が0からn-1で、頂点にいくつかのリンゴがあるとします。木の片方の端を歩くのに1秒かかります。頂点0から始まり、この頂点に戻るツリー内のすべてのリンゴを収集するために費やす必要のある最小時間を秒単位で見つける必要があります。 ここで、無向ツリーのエッジは配列のエッジで指定されます。ここで、edges [i] =[from_i、to_i]は、頂点from_iとto_iを接続するエッジが存在することを意味します。さらに、別の配列にリンゴがあります。hasApple[i] =trueは、頂点iにリンゴがあることを意味します。それ以外の場合は、リン