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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP