C++ 中 N 次切割的最大片段数


给定任务是计算通过总共 N 次水平或垂直切割给定正方形,可以获得的最大相同大小的正方形或矩形片段的数量。

现在让我们用一个例子来理解我们必须做什么 -

输入 - N=8

输出 - 25

解释 - 当 N=8 时,垂直切割数 = 4,水平切割数 = 4。

总片段数 = 25

12345
678910
1112131415
1617181920
2122232425

输入 - 7

输出 - 20

12345
678910
1112131415
1617181920

下面程序中使用的方案如下

  • 如果 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;
}

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

如果我们运行以上代码,我们将得到以下输出 -

20

更新于: 2020-08-17

642 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告