Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 1 x m 크기 타일을 사용하여 n x m 크기의 바닥을 타일링하는 방법의 수를 계산합니다.

<시간/>

방 바닥의 길이와 너비를 나타내는 두 개의 숫자 n과 m이 주어집니다. 목표는 1Xm 크기의 타일을 사용하여 이 바닥을 타일로 만들 수 있는 방법의 수를 계산하는 것입니다.

예를 들어

입력

n=3 m=2

출력

Count the number of ways to tile the floor of size n x m using 1 x m size tiles
are: 3

설명

방법은 아래와 같이 배열된 3개의 1x2 타일입니다 -

C++에서 1 x m 크기 타일을 사용하여 n x m 크기의 바닥을 타일링하는 방법의 수를 계산합니다.

입력

n=3 m=3

출력

Count the number of ways to tile the floor of size n x m using 1 x m size tiles
are: 2

설명

The ways will be three 1x3 tiles arranged vertically and horizontally. Only
two ways.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -

이 접근 방식에서 우리는 n의 값을 확인합니다. n이 m보다 작고 값이 1이면 1Xm 크기의 바닥 전체에 하나의 타일만 배치됩니다.

n이 m과 같으면 n 1xm 타일을 모두 수직으로, 모두 수평으로 배치하는 2가지 방법이 있습니다. n이 m보다 크면 이전 방법을 사용하여 방법을 계산합니다 - way[n−1]+ways[m−1].

  • 바닥과 타일의 크기에 대해 정수 m과 n을 사용합니다.

  • way_tile_floor(int N, int M) 함수는 1 x m 크기의 타일을 사용하여 n x m 크기의 바닥을 타일링하는 방법의 수를 반환합니다.

  • 인덱스 i=N의 현재 값에 대한 타일 수를 저장하려면 길이가 N+1인 배열 arr[ ]를 사용합니다.

  • arr[0]의 경우 타일은 0입니다. 따라서 arr[0]=0입니다.

  • i=1에서 i=N까지 for 루프를 사용하여 rr[]을 트래버스합니다. 각 arr[i]에 대해 i>M이면 이전 값을 사용하여 개수를 계산합니다. arr[i]=arr[i − 1] + arr[i − M].

  • i=1 및 또는 i

  • i=M인 경우 arr[i]=2로 설정합니다.

  • for 루프의 끝에서 arr[N]은 타일을 정렬하는 방법의 수를 갖습니다.

  • 결과로 ar[N]을 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
int ways_tile_floor(int N, int M){
   int arr[N + 1];
   arr[0] = 0;
   for (int i = 1; i <= N; i++){
      if (i > M){
         arr[i] = arr[i − 1] + arr[i − M];
      }
      else if (i < M || i == 1){
         arr[i] = 1;
      } else {
         arr[i] = 2;
      }
   }
   return arr[N];
}
int main(){
   int n = 3, m = 2;
   cout<<"Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: "<<ways_tile_floor(n, m);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: 3