Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การนับเซลล์ในเมทริกซ์ที่ให้ตัวเลขฟีโบนักชีเมื่อมีการเพิ่มจำนวนเซลล์ที่อยู่ติดกันใน C++


กำหนดเมทริกซ์ [ ][ ] ที่มีมิติเป็นแถว 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: