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

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

  1. 最大ベンド数のC++パス長

    二分木が与えられる問題を解決するため。次に、曲がりの数が最大のパスを見つける必要があります。つまり、パスの方向が左から右に、またはその逆に変化する場合、たとえば、曲がりが考慮されます 入力- 出力- 6 このアプローチでは、ツリーをトラバースして、以前の動きを追跡します。方向が変わった場合は、曲げカウントを更新するだけで、最大値が見つかります。 解決策を見つけるためのアプローチ このアプローチでは、すべてのパスをトラバースし、回答を更新するベンドの最大数を見つけます。 例 #include <bits/stdc++.h> using namespace std; s

  2. C++でN回カットした後の円のピースを数えます

    2D円に適用されるカットの数を表す整数Nが与えられます。各円は、円を2つに分割します。目標は、Nカット後に円の断片を見つけることです。 個数=2*いいえ。カットの 例を挙げて理解しましょう。 入力 − n =1 出力 −円の断片:2 説明 − 入力 − n =3 出力 −円の断片:6 説明 − 以下のプログラムで使用されているアプローチは次のとおりです いくつかのカットにNを使用します。 ピースを取る=1*N。 結果を印刷します。 例 #include <bits/stdc++.h> using namespace st