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

合計がC++の対角合計に等しい行/列をカウントします


行と列を持つ2次元配列である行列が与えられます。タスクは、すべての行と列の合計の数を計算して、主行列または二次行列の合計。

入力

int arr[row][col] = {
   { 4, 1, 7 },
   { 10, 3, 5 },
   { 2, 2, 11}
}

出力 −合計が対角合計に等しい行/列の数は&mins;です。 2

説明

主対角線の合計は4+3 + 11 =18であり、二次対角線の合計は7 + 3 + 2=12です。行の合計は4+1 + 7 =12(TRUE)、10 + 3 + 5=18です。 (TRUE)、2 + 2 + 11 =15(FALSE)および列の合計は次のとおりです:4 + 10 + 2 =16(FALSE)、1 + 3 + 2 =6(FALSE)、7 + 5 + 11 =23( FALSE)。したがって、主対角線と二次対角線の合計に一致する行/列の数は-2

です。

入力

int arr[row][col] = {
   { 1, 2, 3 },
   { 4, 5, 2 },
   { 7, 9, 10}
}

出力 −合計が対角合計に等しい行/列の数は− 2

説明

主対角線の合計は1+5 + 10 =16であり、二次対角線の合計は7 + 3 + 5=15です。行の合計は1+2 + 3 =6(FALSE)、4 + 5 + 2=11です。 (FALSE)、7 + 9 + 10 =26(FALSE)および列の合計は次のとおりです:7 + 4 + 1 =12(FALSE)、9 + 5 + 2 =16(TRUE)、3 + 2 + 10 =15( TRUE)。したがって、主対角線と二次対角線の合計に一致する行/列の数は-2

です。

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

  • 2次元配列を作成して、行サイズと列サイズのマトリックスを形成します

  • 主行列と二次行列の変数を作成します。また、カウントを格納するためのカウント変数

  • ループFORをiから0までcolまで、jをcol-1からcolまで開始し、iをインクリメントしてjをデクリメントします

  • ループ内で、プリンシパルをプリンシパル+マトリックス[i] [i]として設定し、セカンダリをセカンダリ+マトリックス[i] [j]

    として設定します。
  • iからcolまでのループFORを開始します

  • ループ内で、行を0に、列を0に設定し、ループ内で、jから0までの別のループFORを開始してcol

  • ループ内で、行を行+行列[i] [j]

    として設定します
  • ループ内で、jからcolまでの別のループFORを開始します

    ループ内で、colからcol + matrix [j] [i]
  • ループ内で、IF(行==プリンシパル)をチェックします|| (行==セカンダリ)次に、カウントを1ずつ増やします

  • ループ内で、IF(col ==principal)をチェックします|| (col ==セカンダリ)次に、カウントを1ずつ増やします

  • カウントを返す

  • 結果を印刷します。

#include <iostream>
#define row 3
#define col 3
using namespace std;
int diagonal_sum(int matrix[row][col]){
   int principal = 0;
   int secondary = 0;
   int r = 0;
   int c = 0;
   int count = 0;
   int i = 0, j = 0;
   for (i = 0, j = col - 1; i < col; i++, j--){
      principal += matrix[i][i];
      secondary += matrix[i][j];
   }
   for (int i = 0; i < col; i++){
      r = 0;
      c = 0;
      for (int j = 0; j < col; j++){
         r += matrix[i][j];
      }
      for (int j = 0; j < col; j++){
         c += matrix[j][i];
      }
      if ((r == principal) || (r == secondary)){
         count++;
      }
      if ((c == principal) || (c == secondary)){
         count++;
      }
   }
   return count;
}
int main(){
   int matrix[row][col] = {
      { 4, 1, 7 },
      { 10, 3, 5 },
      { 2, 2, 11}};
   cout<<"Count of rows/columns with sum equals to diagonal sum are: "<<diagonal_sum(matrix);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Count of rows/columns with sum equals to diagonal sum are: 2

  1. 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

  2. C++でbよりも大きいプレフィックス

    この問題では、strをn回追加することによって文字列が作成されるように、aとbおよび整数Nのみを含む文字列strが与えられます。私たちのタスクは、aの数がbの数よりも多い部分文字列の総数を出力することです。 問題を理解するために例を見てみましょう Input: aab 2 Output: 9 Explanation: created string is aabaab. Substrings with count(a) > count(b) : ‘a’ , ‘aa’, ‘aab’, ‘aaba&rsquo