-
C++のバイナリ表現での2つの直接の1の間の最大0
問題の説明 数値nが与えられた場合、タスクは、与えられたnの2進表現で2つの直接の1の間の最大0を見つけることです。バイナリ表現に含まれる1が2つ未満の場合は-1を返します 例 入力番号が35の場合、その2進表現は-です。 00100011 上記のバイナリ表現では、2つの直接の1の間に30があります。したがって、答えは3です。 アルゴリズム この問題を解決するには、ビット単位のシフト演算子を使用できます。 nの2進表現で2つの直接1の位置を見つけ、これらの位置の差を最大化する必要があります。 数値が0または2の累乗の場合は、-1を返します IInitialize変数prevを、
-
C++の正方行列の最大値と最小値
問題の説明 次数n*nの正方行列が与えられた場合、行列から最大値と最小値を見つけます 例 与えられた行列が-の場合 {{15, 17, 19}, {5, 1, 7}, {14, 5, 16}} then Minimum number is 1 and maximum number is 19 アルゴリズム マトリックスから2つの要素を選択します。1つはマトリックスの行の先頭から、もう1つはマトリックスの同じ行の末尾から選択します。 それらを比較し、次にそれらの小さい方をマトリックスの最小値と比較し、大きい方をマトリックスの最大値と比較します。 2つの要素については、3つの比較が必要であ
-
C++の配列内のペアの最大ビット単位AND値
問題の説明 n個の正の要素の配列が与えられます。配列から要素の任意のペアによって生成された最大ビット単位のAND値を見つける必要があります。 例 入力配列が{10、12、15、18}の場合、ビット単位のANDの最大値は12です。 アルゴリズム 単一ビットに対するビット単位のAND演算の結果は、両方のビットが1のときに最大になります。このプロパティを考慮すると- MSBから開始して、設定値を持つ配列の要素が2つ以上あるかどうかを確認します はいの場合、そのMSBはソリューションの一部になり、結果に追加されます。そうでない場合は、そのビットを破棄します 同様に、ビット位置をMSBからLS
-
C++での四辺形の最大面積
問題の説明 四辺形a、b、c、dの4つの辺が与えられた場合、与えられた辺から可能な四辺形の最大面積を見つけます。 アルゴリズム 以下のブラーマグプタの公式を使用して、この問題を解決できます- √(s-a)(s-b)(s-c)(s-d) 上記の式では、sは半周長です。次のように計算されます- S =(a + b + c + d)/ 2 例 例を見てみましょう- #include <bits/stdc++.h> using namespace std; double getMaxArea(double a, double b, double c, double d) {
-
C++で同じ順序を維持する2つの指定された配列からの最大配列
問題の説明 2つの同じサイズの配列A[]とB[]が与えられます。タスクは、同じサイズの3番目の配列を形成することです。結果の配列には、両方の配列から最大n個の要素が含まれている必要があります。最初にA[]の要素を選択し、次に元の配列に表示されるのと同じ順序でB[]の要素を選択する必要があります。共通の要素がある場合は、res []に1つの要素のみが存在し、A []が優先される必要があります。 例 入力配列が-の場合 arr1[] = {9, 17, 2, 25, 6} arr2[] = {17, 4, 8, 10, 1} then final array is: {9, 17, 25, 8
-
C++でのサイズがX以上Y以下のサブアレイの最大平均
問題の説明 配列arr[]と2つの整数XおよびYが与えられます。タスクは、平均が最大で、サイズがX以上Y以下のサブ配列を見つけることです。 例 入力配列が{2、10、15、7、8、4}で、x=3およびY=3の場合、次のように最大平均12.5を取得できます- (10 + 15) / 2 = 12.5 アルゴリズム XからサイズYまでのサイズのすべてのサブアレイを反復処理し、そのようなすべてのサブアレイの中で最大の平均を見つけます。 時間計算量を減らすために、プレフィックス合計配列を使用して、O(1)の複雑さのサブ配列の合計を取得できます 例 例を見てみましょう- #include &
-
C++での配列の最大平均合計パーティション
問題の説明 配列が与えられた場合、数値Aの行を最大でK個の隣接する(空でない)グループに分割し、スコアは各グループの平均の合計になります。スコアリングできる最大スコアはいくつですか? 例 入力配列が{9、2、5、3、10}の場合、次のように配列を分割できます- {9} {2、5、3}および{10}の場合、これの平均合計は- 9 +(2 + 5 + 3)/ 3 + 10 =22.33 アルゴリズム この問題を解決するために暗記技術を使用することができます- メモ[i][k]を、A[iからn-1]を最大でK個のパーツに分割する最高のスコアとします 最初のグループでは、A[iからn-1
-
C++で指定された範囲からの最大ビットごとのANDペア
問題の説明 範囲[L、R]が与えられた場合、タスクは、L≤X
-
C++ではすべての値が0またはnの行列の最大行列式
問題の説明 正の数nを与え、0またはnの組み合わせで形成でき、最大の行列式を持つ3*3行列を見つける必要があります。 例 n =15の場合、次のように行列を作成できます- {{15, 15, 0}{0, 15, 15}{15, 0, 0}} 0またはnの要素を持つ3*3行列の場合、可能な最大行列式は2 *(n) 3です。 。したがって、答えは- 2 *(15) 3 =6750 アルゴリズム 0またはnの要素を持つ3*3行列の場合、可能な最大行列式は2 *(n) 3です。 例 例を見てみましょう- #include <bits/stdc++.h> using nam
-
C++でフォレストを均一にするためのツリーからの最大エッジ除去
問題の説明 頂点の数が偶数である無向ツリーの場合、結果のフォレストの連結成分ごとに頂点の数が偶数になるように、このツリーから最大数のエッジを削除する必要があります。 例 上に示したツリーでは、接続された各コンポーネントが偶数の頂点を持つように、赤で示された最大2つのエッジ0-2と0-4を削除できます。 アルゴリズム ツリーが接続されているときに、任意の開始ノードからDFSを実行します 現在のノードの下にルート化されたサブツリー内のノードの数を0として初期化します 現在のノードのすべてのサブツリーに対して再帰的にフォローする- 現在のサブツリーのサイズが偶数の場合、サブツリーを切断で
-
C++のBSTの2つのノード間の最大要素
問題の説明 N個の要素の配列と、指定された配列に属する2つの整数A、Bが与えられます。 arr[0]からarr[n-1]に要素を挿入して、二分探索木を作成します。タスクは、AからBへのパスで最大の要素を見つけることです。 例 配列が{24、23、15、36、19、41、25、35}の場合、次のようにBSTを形成できます- A=19およびB=41とすると、これら2つのノード間の最大要素は41です。 アルゴリズム ノードAおよびBの最も低い共通祖先(LCA)を見つけます。 LCAとAの間の最大ノードを見つけます。これをmax1と呼びましょう LCAとBの間の最大ノードを見つけます。こ
-
C++でハットを印刷するプログラム
このチュートリアルでは、小屋のパターンを印刷するプログラムについて説明します。 このために、印刷する小屋の幅(たとえばN)が提供されます。私たちのタスクは、星を使用して指定された幅の小屋構造を印刷し、線文字を使用して小屋内のゲートを印刷することです。 例 #include <iostream> using namespace std; //printing the given hut structure int print_hut(int n){ int i, j, t; if (n % 2 == 0) { &n
-
C++で興味深いパターンを印刷するプログラム
このチュートリアルでは、特定の興味深いパターンを印刷するプログラムについて説明します。 このために、パターンの半分の幅が提供されます。私たちの仕事は、与えられた幅に応じて同様のパターンを印刷し、その左右の部分を互いに鏡像にすることです。 例 #include<stdio.h> //printing the given pattern void print_pattern(int n){ int i,j; //printing the upper half for (i=1; i<=n; i++){
-
C++で逆ダイヤモンドパターンを印刷するプログラム
このチュートリアルでは、特定の逆ダイヤモンドパターンを印刷するプログラムについて説明します。 このために、Nの値が提供されます。私たちのタスクは、2N-1の高さに応じてダイヤモンドパターンを逆に印刷することです。 例 #include<bits/stdc++.h> using namespace std; //printing the inverse diamond pattern void printDiamond(int n){ cout<<endl; int i, j = 0; //l
-
カイトパターンをC++で印刷するプログラム
このチュートリアルでは、特定の凧のパターンを印刷するプログラムについて説明します。 このため、入力をN=5とします。私たちのタスクは、指定されたカイト構造を2N + 1 =5の全高で印刷することです。これには、上部のダイヤモンド構造の9行と、下部の不完全なダイヤモンド構造の2行が含まれます。 例 #include <bits/stdc++.h> #include <stdlib.h> using namespace std; int main(){ int i, j, k, sp, space = 4; char p
-
C++で最後の10行を印刷するプログラム
このチュートリアルでは、最後の10行を印刷するプログラムについて説明します。 このために、次の行の開始を示す改行文字で構成される文字列が提供されます。私たちのタスクは、最後から始めて、最後から数えて10行すべてを印刷することです。 例 #include <bits/stdc++.h> using namespace std; #define DELIM '\n' //printing the last 10 lines void print_last_lines(char *str, int n){ if (n <= 0) &nbs
-
C++で最後のN行を印刷するプログラム
このチュートリアルでは、最後のN行を印刷するプログラムについて説明します。 このために、次の行の開始を示す改行文字と最後から印刷される行数で構成される文字列が提供されます。私たちのタスクは、最後から始めて、最後から数えてN行すべてを印刷することです。 例 #include <bits/stdc++.h> using namespace std; #define DELIM '\n' //printing the last N lines void print_last_lines(char *str, int n){ if (n <
-
C++でバイナリツリーをミラーツリーに変換する
このチュートリアルでは、二分木をそのミラーツリーに変換するプログラムについて説明します。 このために、二分木が提供されます。私たちのタスクは、左端と右端の値を交換して、指定されたバイナリツリーからミラーツリーを作成することです。 例 #include<bits/stdc++.h> using namespace std; //binary tree node structure struct Node{ int data; struct Node* left; struct Node* right; }
-
すべてのノードがすべてのノードの合計をC++の右側のサブツリーに格納するようにバイナリツリーを変換します
このチュートリアルでは、すべてのノードがすべてのノードの合計を右側のサブツリーに格納するように、バイナリツリーを変換するプログラムについて説明します。 このために、二分木が提供されます。私たちのタスクは、すべてのノードがノードとその右側のサブツリーの合計に等しくなければならない別のツリーを返すことです。 例 #include <bits/stdc++.h> using namespace std; //node structure of tree struct Node { int data; Node *left, *right
-
C++で二分木を循環二重リンクリストに変換する
このチュートリアルでは、二分木を循環二重リンクリストに変換するプログラムについて説明します。 このために、二分木が提供されます。私たちのタスクは、左ノードと右ノードをそれぞれ左要素と右要素に変換することです。そして、二分木の順序を循環リンクリストの順序にします 例 #include<iostream> using namespace std; //node structure of the binary tree struct Node{ struct Node *left, *right; int data; }; //app