กำหนดเมทริกซ์ [ ][ ] ที่มีมิติเป็นแถว x col เป้าหมายคือการหาจำนวนเซลล์ของเมทริกซ์ที่ตรงตามเงื่อนไขที่กำหนด:
ค่าของเมทริกซ์เซลล์ [i][j] + no. ของเซลล์ที่อยู่ติดกัน =เลขฟีโบนักชี
ตัวเลขในชุดฟีโบนักชี:- 0, 1, 1, 2, 3, 5, 8, 13, 21, 43 …..
ให้เราเข้าใจด้วยตัวอย่าง
ตัวอย่าง
ป้อนข้อมูล - เมทริกซ์[แถว][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
ป้อนข้อมูล - เมทริกซ์[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)
- ใช้เมทริกซ์[][] และเริ่มต้นมัน
- Function check_square(long double num) รับค่าตัวเลขและคืนค่า true หากเป็นกำลังสองสมบูรณ์
- Function check_fibonacci(int num) คืนค่า true ถ้า num เป็นตัวเลขฟีโบนักชี
- ถ้า check_square(5 * num * num + 4) || check_square(5 * num * num - 4) คืนค่า จริง จากนั้น num จะเป็นตัวเลขฟีโบนักชี
- ฟังก์ชัน Fibonacci_cells(int matrix[row][col]) คืนค่าจำนวนเซลล์ในเมทริกซ์ซึ่งให้ตัวเลขฟีโบนักชีเมื่อมีการเพิ่มจำนวนเซลล์ที่อยู่ติดกัน
- นับเริ่มต้นเป็น 0
- สำรวจโดยใช้ลูปจาก i=0 ถึง i
- เพิ่ม 2 ,3 หรือ 4 ให้รวมตามเซลล์ที่อยู่ติดกัน
- หากผลรวมใหม่เป็นตัวเลขฟีโบนักชี ดังนั้น check_fibonacci(total) จะคืนค่าเป็นจริง ดังนั้นจึงนับการเพิ่มขึ้น
- เมื่อสิ้นสุดการวนซ้ำจะนับเป็นผลลัพธ์
ตัวอย่าง
#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: