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

C++에서 인접한 셀의 개수를 더할 때 피보나치 수를 나타내는 행렬의 셀 개수

<시간/>

행 x 열의 차원을 갖는 행렬 [ ][ ]이 주어집니다. 목표는 주어진 조건을 충족하는 행렬의 셀 수를 찾는 것입니다.

셀 행렬의 값 [i][j] + no. 인접한 셀의 수 =피보나치 수

피보나치 수열의 숫자:- 0, 1, 1, 2, 3, 5, 8, 13, 21, 43 …..

예를 들어 이해합시다.

예를 들어

입력 - 행렬[행][열] ={{1, 4, 1}, {2, 0, 1}, {5, 1, 1}

출력 - 인접한 셀의 개수를 더할 때 피보나치 수를 나타내는 행렬의 셀 개수는 다음과 같습니다. 4

설명

0 1 2

0 1 4 1

1 2 0 1

2 5 1 1

셀(0,0) → 1+2=3 ( 2개의 인접한 셀 (1,0) 및 (0,1) )

셀(0,2) → 1+2=3

셀(1,0) → 2+3=5

셀(2,2) → 1+2=3

입력 - 행렬[행][열] ={{0,0,0}, {0, 1, 0}, {0, 0, 0} }

출력 - 인접한 셀의 개수를 더할 때 피보나치 수를 나타내는 행렬의 셀 개수는 다음과 같습니다. 9

설명

0 1 2

0 0 0 0

1 0 1 0

2 0 0 0

셀(0,0) → 0+2=2 ( 2개의 인접한 셀 (1,0) 및 (0,1) ) 유사하게 셀 (0,2), (2,2) 및 (2,0)

셀(0,1) → 0+3=3 ( 3개의 인접한 셀 (0,1) 및 (0,2) 및 (1,1) ) 유사하게 셀 (1,0), (1,2) 및 (2 ,1)

셀(1,1) → 1+4=5

9개의 셀이 모두 계산됩니다.

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

모든 종류의 매트릭스에는 세 가지 유형의 셀만 있습니다. 모서리 셀에는 2개의 인접한 셀이 있으며, 3개의 인접한 셀이 있는 셀과 4개의 인접한 셀만 있는 셀이 있습니다. 이 셀의 값에 2, 3 또는 4를 더하고 check_fibonacci(int num) 함수를 사용하여 합계가 피보나치 수인지 확인합니다.

  • 행렬[][]을 가져와 초기화합니다.
  • check_square(long double num) 함수는 숫자를 받아 완전제곱수이면 true를 반환합니다.
  • 함수 check_fibonacci(int num)는 num이 피보나치 수인 경우 true를 반환합니다.
  • check_square(5 * num * num + 4)인 경우 || check_square(5 * num * num - 4)는 true를 반환하고 num은 피보나치 수입니다.
  • Fibonacci_cells(int matrix[row][col]) 함수는 인접 셀의 개수를 더할 때 피보나치 수를 제공하는 행렬의 셀 개수를 반환합니다.
  • 초기 카운트를 0으로 합니다.
  • i=0에서 i
  • 인접한 셀을 기준으로 합계에 2,3 또는 4를 추가합니다.
  • 새 합계가 피보나치 수인 경우 check_fibonacci(total)는 true를 반환하므로 카운트를 증가시킵니다.
  • 모든 for 루프가 끝나면 count를 결과로 반환합니다.

#include <bits/stdc++.h>
using namespace std;
#define row 3
#define col 3

bool check_square(long double num) {
   long double val = sqrt(num);
   return ((val - floor(val)) == 0);
}
bool check_fibonacci(int num) {
   return check_square(5 * num * num + 4) || check_square(5 * num * num - 4);
}
int Fibonacci_cells(int matrix[row][col]) {
   int count = 0;

   for (int i = 0; i < row; i++) {
      for (int j = 0; j < col; j++) {
         int total = matrix[i][j];
         if ((i == 0 && j == 0) || (i == row - 1 && j == 0) || (i == 0 && j == col - 1) || (i == row - 1 && j == col - 1)) {
            total = total + 2;
         } else if (i == 0 || j == 0 || i == row - 1 || j == col - 1) {
            total = total + 3;
         } else {
            total = total + 4;
         }
         if (check_fibonacci(total)) {
            count++;
         }
      }
   }
   return count;
}
int main() {
   int matrix[row][col] = {{1, 4,1},{2,0,1},{5,1,1}};
   cout << "Count of cells in a matrix which give a Fibonacci number when the count of adjacent cells is added are: " << Fibonacci_cells(matrix);
   return 0;
}

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

출력

Count of cells in a matrix which give a Fibonacci number when the count of adjacent cells is added are: