C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

隣接するセルの数が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

Cell(0,0)→1 + 2 =3(2つの隣接するセル(1,0)と(0,1))

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

セル(1,0)→2 + 3 =5

Cell(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

Cell(0,0)→0 + 2 =2(2つの隣接するセル(1,0)および(0,1))同様にセル(0,2)、(2,2)および(2,0)

>

Cell(0,1)→0 + 3 =3(3つの隣接するセル(0,1)と(0,2)と(1,1))同様にセル(1,0)、(1,2)と(2 、1)

セル(1,1)→1 + 4 =5

9個のセルすべてがカウントされます。

以下のプログラムで使用されているアプローチは次のとおりです

あらゆる種類のマトリックスには、3つのタイプのセルのみがあります。コーナーセルには2つの隣接セルがあり、セルには3つの隣接セルがあり、セルには4つの隣接セルのみがあります。これらのセルの値に2、3、または4を加算し、関数check_fibonacci(int num)を使用して合計がフィボナッチ数であるかどうかを確認します。

  • matrix [] []を取り、それを初期化します。
  • 関数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とします。
  • forループを使用してi=0からi
  • 隣接するセルに基づいて、合計に2、3、または4を追加します。
  • 新しい合計がフィボナッチ数の場合、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: 

  1. C ++を使用してOpenCVのフレームの総数をカウントするにはどうすればよいですか?

    OpenCVでフレームの総数を計算する方法を学びます。 OpenCVを使用すると、ビデオのフレームの総数をカウントして表示するのが基本です。ただし、リアルタイムビデオフレームの総数をカウントできないことに注意する必要があります。リアルタイム動画には特定のフレーム数がないためです。 次のプログラムは、合計フレーム数をカウントし、コンソールウィンドウに表示します。 例 #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { &

  2. Xとの合計がC++のフィボナッチ数であるノードをカウントします

    ノードの重みを数値として持つ二分木を指定します。目標は、その数がフィボナッチ数であるような重みを持つノードの数を見つけることです。フィボナッチ数列の数は次のとおりです。0、1、1、2、3、5、8、13…。n番目の数はの合計です。 (n-1)番目と(n-2)番目。重みが13の場合、それはフィボナッチ数であるため、ノードがカウントされます。 例 入力 temp=1。値を入力した後に作成されるツリーを以下に示します- 出力 Count the nodes whose sum with X is a Fibonacci number are: 3 説明 we are given with