C++中计算行/列和等于对角线和的行/列数


给定一个矩阵,它是一个具有行和列的二维数组,任务是计算所有行和列的和,使其等于主对角线或副对角线的和。

输入

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

输出 − 行/列和等于对角线和的个数为 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

下面程序中使用的算法如下

  • 创建一个二维数组来形成一个行大小和列大小的矩阵

  • 创建主对角线和副对角线的变量。还有一个计数变量来存储计数

  • 从 i = 0 到 col,j 从 col - 1 到 col 开始循环,递增 i 并递减 j

  • 在循环内,将 principal 设置为 principal + matrix[i][i],并将 secondary 设置为 secondary + matrix[i][j]

  • 从 i = 0 到 col 开始循环 FOR

  • 在循环内,将 row 设置为 0,col 设置为 0,在循环内,从 j = 0 到 col 开始另一个循环 FOR

  • 在循环内,将 row 设置为 row + matrix[i][j]

  • 在循环内,从 j = 0 到 col 开始另一个循环 FOR

    在循环内,col 设置为 col + matrix[j][i]
  • 在循环内,检查 IF (row == principal) || (row == secondary),则将计数加 1

  • 在循环内,检查 IF (col == principal) || (col == secondary),则将计数加 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

更新于:2020年8月31日

134 次浏览

开启您的职业生涯

通过完成课程获得认证

开始
广告