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; }
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
输出
如果我们运行以上代码,我们将得到以下输出 -
20
广告