在 C++ 中計算矩陣中滿足以下條件的單元格數量:當計算相鄰單元格的數量時,結果為斐波那契數。
給定一個維度為行 x 列的矩陣 [ ][ ]。目標是找到滿足給定條件的矩陣單元格的數量。
單元格矩陣 [i][j] 的值 + 其相鄰單元格的數量 = 斐波那契數。
斐波那契數列中的數字:- 0、1、1、2、3、5、8、13、21、43……
讓我們透過示例來理解。
例如
輸入 - matrix[row][col] = {{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
輸入 - matrix[row][col] = {{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) 返回 true,如果 num 是斐波那契數。
- 如果 check_square(5 * num * num + 4) || check_square(5 * num * num - 4) 返回 true,則 num 是斐波那契數。
- 函式 Fibonacci_cells(int matrix[row][col]) 返回當計算相鄰單元格的數量時,結果為斐波那契數的矩陣中的單元格數量。
- 將初始計數設定為 0。
- 使用 for 迴圈從 i=0 到 i<row 和 j=0 到 j<col 進行遍歷。獲取 total = matrix[i][j]。
- 根據其相鄰單元格,將 2、3 或 4 新增到 total 中。
- 如果新的 total 是斐波那契數,則 check_fibonacci(total) 將返回 true,因此遞增計數。
- 在所有 for 迴圈結束時,返回計數作為結果。
示例
#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: