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