Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm số ô trong ma trận cung cấp số Fibonacci khi số ô liền kề được thêm vào trong C ++

Cho một ma trận [] [] có kích thước là hàng x cột. Mục đích là tìm số ô của ma trận đáp ứng điều kiện đã cho:

Giá trị của ma trận ô [i] [j] + no. trong số các ô liền kề với nó =một số Fibonacci

Các số trong chuỗi Fibonacci:- 0, 1, 1, 2, 3, 5, 8, 13, 21, 43… ..

Hãy cho chúng tôi hiểu với các ví dụ.

Ví dụ

Đầu vào - ma trận [row] [col] ={{1, 4, 1}, {2, 0, 1}, {5, 1, 1}

Đầu ra - Số lượng ô trong ma trận cung cấp số Fibonacci khi số lượng ô liền kề được thêm vào là:4

Giải thích

0 1 2

0 1 4 1

1 2 0 1

2 5 1 1

Ô (0,0) → 1 + 2 =3 (2 ô liền kề (1,0) và (0,1))

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

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

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

Đầu vào - ma trận [row] [col] ={{0,0,0}, {0, 1, 0}, {0, 0, 0}}

Đầu ra - Số lượng ô trong ma trận cung cấp số Fibonacci khi số ô liền kề được thêm vào là:9

Giải thích

0 1 2

0 0 0 0

1 0 1 0

2 0 0 0

Ô (0,0) → 0 + 2 =2 (2 ô liền kề (1,0) và (0,1)) Tương tự các ô (0,2), (2,2) và (2,0)

Ô (0,1) → 0 + 3 =3 (3 ô liền kề (0,1) và (0,2) và (1,1)) Tương tự các ô (1,0), (1,2) và (2 , 1)

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

Tất cả 9 ô đều được đếm.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

Trong ma trận của bất kỳ loại nào sẽ chỉ có ba loại ô. Các ô góc sẽ có 2 ô liền nhau, ô có 3 ô liền nhau và ô chỉ có 4 ô liền nhau. Thêm 2, 3 hoặc 4 vào giá trị của các ô này và kiểm tra xem tổng có phải là số fibonacci hay không bằng cách sử dụng hàm check_fibonacci (int num).

  • Lấy một ma trận [] [] và khởi tạo nó.
  • Hàm check_square (num kép dài) nhận một số và trả về true nếu nó là một hình vuông hoàn hảo.
  • Hàm check_fibonacci (int num) trả về true nếu num là số Fibonacci.
  • Nếu check_square (5 * num * num + 4) || check_square (5 * num * num - 4) trả về true thì num là số Fibonacci.
  • Hàm Fibonacci_cells (int matrix [row] [col]) trả về số lượng ô trong ma trận đưa ra số Fibonacci khi số lượng các ô liền kề được thêm vào.
  • Lấy số lượng ban đầu là 0.
  • Đảo ngược bằng cách sử dụng các vòng lặp for từ i =0 đến i
  • Thêm 2, 3 hoặc 4 vào tổng số dựa trên các ô bên cạnh nó.
  • Nếu tổng mới là số fibonacci thì check_fibonacci (tổng) sẽ trả về true, do đó, tính theo số gia.
  • Kết quả là ở cuối tất cả các vòng lặp for, kết quả trả về.

Ví dụ

#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;
}

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Đầu ra

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