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

C++で無限のポイントの数を見つける


この問題では、2次元配列mat[n][m]が与えられます。私たちの仕事は、行列内の無限の点の数を見つけることです。

次の要素が1の場合、行列の任意の点は無限であると言われます。つまり、

mat[i][j] is endless when mat[i+1][j] … mat[n][j] and
mat[i][j+1] … mat[i][m] are 1.

問題を理解するために例を見てみましょう

入力

mat[][] = {0, 0}
{1, 1}

出力

2

説明

要素mat[0][1]とmat[1][1]は無限です。

ソリューションアプローチ

この問題の簡単な解決策は、行列のすべての要素を反復することです。そして、各要素について、現在の要素が無限であるかどうかを確認します。はいの場合、カウントを増やします。配列のすべての要素を確認した後、カウントを返します。

効率的なアプローチ

この問題を解決するために、動的計画法を使用して、要素が無限であるかどうかを確認します。 1である必要があった後、行と列のすべての要素が無限になるようにします。

したがって、2つのDP行列を使用して、各インデックスの無限の次の行と無限の次の列をカウントします。そして、位置に次の無限の行と列があるかどうか、各位置のチェック。次に、無限の要素の数を返します。

ソリューションの動作を説明するプログラム

#include <iostream>
#include <math.h>
using namespace std;
const int monthDays[12] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
int countLeapYearDays(int d[]){
   int years = d[2];
   if (d[1] <= 2)
      years--;
   return ( (years / 4) - (years / 100) + (years / 400) );
}
int countNoOfDays(int date1[], int date2[]){
   long int dayCount1 = (date1[2] * 365);
   dayCount1 += monthDays[date1[1]];
   dayCount1 += date1[0];
   dayCount1 += countLeapYearDays(date1);
   long int dayCount2 = (date2[2] * 365);
   dayCount2 += monthDays[date2[1]];
   dayCount2 += date2[0];
   dayCount2 += countLeapYearDays(date2);
   return ( abs(dayCount1 - dayCount2) );
}
int main(){
   int date1[3] = {13, 3, 2021};
   int date2[3] = {24, 5, 2023};
   cout<<"The number of days between two dates is "<<countNoOfDays(date1, date2);
   return 0;
}

出力

The number of days between two dates is 802

  1. グラフ内のアーティキュレーションポイントの数を見つけるためのC++プログラム

    グラフ内のアーティキュレーションポイント(またはカット頂点)は、グラフを削除する(およびグラフを通るエッジ)場合にグラフを切断するポイントです。切断された無向グラフのアーティキュレーションポイントは、接続されたコンポーネントの数を増やす頂点の削除です。 アルゴリズム Begin    We use dfs here to find articulation point:    In DFS, a vertex w is articulation point if one of the following two conditions is satisfi

  2. C++のCHAR_BIT

    CHAR_BITは、charのビット数です。これは、C++言語の「limits.h」ヘッダーファイルで宣言されています。 1バイトあたり8ビットです。 これがC++言語のCHAR_BITの例です 例 #include <bits/stdc++.h> using namespace std; int main() {    int x = 28;    int a = CHAR_BIT*sizeof(x);    stack<bool> s;    cout << "T