C++でのNカットの最大ピース数
与えられたタスクは、水平または垂直に合計N回のカットで、特定の正方形のピースをカットすることによって得られる、同じサイズの正方形または長方形のピースの最大数を計算することです。
例を使用して、私たちがしなければならないことを理解しましょう-
入力 − n =8
出力 − 25
説明 − N =8の場合、垂直方向のカット数=4、水平方向のカット数=4。
合計ピース=25
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 |
入力 − 7
出力 − 20
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
-
Nがカットの数であり、結果のピースを最大化する必要がある場合は、水平方向と垂直方向のカットを同じ数にする必要があります。
Nが偶数の場合、水平方向と垂直方向のカットは等しくなります。Nが奇数の場合、水平方向のカットは垂直方向のカットより1大きくなり、その逆も同様です。
したがって、水平カットの数=N/2および垂直カットの数=N-H。
-
関数MaxPieces()で、int型の変数H =N / 2を初期化して、水平カットの数を格納します。
-
タイプintの別の変数V=N-Hを初期化して、垂直カットの数を格納します。
-
最終的なピース数=(水平行)*(垂直行)=(H + 1)*(V + 1)
例
#include <bits/stdc++.h> using namespace std; int MaxPieces(int N){ //H is the number of horizontal cuts int H = N / 2; //V is the number of vertical cuts int V = N-H; // maximum number of pieces = (H+1)*(V+1) return ((H + 1) * (V + 1)); } //Main function int main(){ //Number of cuts int N = 7; cout << "Max pieces = "<<MaxPieces(N); return 0; }
出力
上記のコードを実行すると、次の出力が得られます-
20
-
最大ベンド数のC++パス長
二分木が与えられる問題を解決するため。次に、曲がりの数が最大のパスを見つける必要があります。つまり、パスの方向が左から右に、またはその逆に変化する場合、たとえば、曲がりが考慮されます 入力- 出力- 6 このアプローチでは、ツリーをトラバースして、以前の動きを追跡します。方向が変わった場合は、曲げカウントを更新するだけで、最大値が見つかります。 解決策を見つけるためのアプローチ このアプローチでは、すべてのパスをトラバースし、回答を更新するベンドの最大数を見つけます。 例 #include <bits/stdc++.h> using namespace std; s
-
C++でN回カットした後の円のピースを数えます
2D円に適用されるカットの数を表す整数Nが与えられます。各円は、円を2つに分割します。目標は、Nカット後に円の断片を見つけることです。 個数=2*いいえ。カットの 例を挙げて理解しましょう。 入力 − n =1 出力 −円の断片:2 説明 − 入力 − n =3 出力 −円の断片:6 説明 − 以下のプログラムで使用されているアプローチは次のとおりです いくつかのカットにNを使用します。 ピースを取る=1*N。 結果を印刷します。 例 #include <bits/stdc++.h> using namespace st