주어진 작업은 주어진 정사각형 조각을 가로 또는 세로로 총 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