首页 > 编程语言 >C++计算矩阵对角线和的程序

C++计算矩阵对角线和的程序

时间:2023-01-15 11:04:29浏览次数:43  
标签:major int sum 矩阵 diagonal C++ 对角线 minor


二维数组或矩阵的使用对于几个 应用。矩阵行和列用于保存数字。我们可以定义2D C++中的矩阵也使用多维数组。在本文中,我们将了解如何 使用 C++ 计算给定方阵的对角线和。

矩阵有两个对角线,主对角线和次要对角线(有时 称为大对角线和小对角线)。主要对角线从左上角开始 角(索引 [0, 0])到右下角(索引 [n-1, n-1]),其中 n 是 方阵。主要对角线从右上角(索引 [n-1, 0])到左下角 角(索引 [0, n-1])。让我们看看算法来找到元素的总和以及 这两个对角线。

矩阵对角线和


⎡⎣⎢862574319 ⎤⎦⎥,[853671249 ],


<span style="color:#000000">Sum of all elements in major diagonal: (8 + 7 + 9) = 24
Sum of all elements in minor diagonal: (3 + 7 + 2) = 12
</span>

在前面的示例中,使用了一个 3 x 3 矩阵。我们已经扫描了对角线 单独并计算总和。让我们看看算法和实现清晰 视图。

算法

  • 读取矩阵 M 作为输入
  • 考虑 M 有 n 行和 n 列
  • sum_major := 0
  • sum_minor := 0
  • 对于范围从 0 到 n - 1 的 i,请执行
  • 对于从 0 到 n - 1 的 j 朗吉格,执行
  • 如果 i 和 j 相同,则
  • sum_major := sum_major + M[ i ][ j ]
  • 结束如果
  • 如果 (i + j) 与 (N - 1) 相同,则
  • sum_minor := sum_minor + M[ i ][ j ]
  • 结束如果
  • 结束
  • 结束
  • 返回总和



#include <iostream> 
#include <cmath>
#define N 7
using
namespace std
;
float
solve
(
int M
[ N
]
[ N
]
)
{
int sum_major
=
0
;
int sum_minor
=
0
;
for
(
int i
=
0
; i
< N
; i
++
)
{
for
(
int j
=
0
; j
< N
; j
++
)
{
if
( i
== j
)
{ sum_major
= sum_major
+ M
[ i
]
[ j
]
;
}
if
(
(i
+ j
)
== N
-
1
)
{ sum_minor
= sum_minor
+ M
[ i
]
[ j
]
;
}
}
} cout
<<
"The sum of major diagonal: "
<< sum_major
<< endl
; cout
<<
"The sum of minor diagonal: "
<< sum_minor
<< endl
;
}
int
main
(
)
{
int mat1
[ N
]
[ N
]
=
{
{
5
,
8
,
74
,
21
,
69
,
78
,
25
}
,
{
48
,
2
,
98
,
6
,
63
,
52
,
3
}
,
{
85
,
12
,
10
,
6
,
9
,
47
,
21
}
,
{
6
,
12
,
18
,
32
,
5
,
10
,
32
}
,
{
8
,
45
,
74
,
69
,
1
,
14
,
56
}
,
{
7
,
69
,
17
,
25
,
89
,
23
,
47
}
,
{
98
,
23
,
15
,
20
,
63
,
21
,
56
}
,
}
; cout
<<
"For the first matrix: "
<< endl
;
solve
( mat1
)
;
int mat2
[ N
]
[ N
]
=
{
{
6
,
8
,
35
,
21
,
87
,
8
,
26
}
,
{
99
,
2
,
36
,
326
,
25
,
24
,
56
}
,
{
15
,
215
,
3
,
157
,
8
,
41
,
23
}
,
{
96
,
115
,
17
,
5
,
3
,
10
,
18
}
,
{
56
,
4
,
78
,
5
,
10
,
22
,
58
}
,
{
85
,
41
,
29
,
65
,
47
,
36
,
78
}
,
{
12
,
23
,
87
,
45
,
69
,
96
,
12
}
}
; cout
<<
"\nFor the second matrix: "
<< endl
;
solve
( mat2
)
;
}


输出

<span style="color:#000000">For the first matrix: 
The sum of major diagonal: 129
The sum of minor diagonal: 359

For the second matrix:
The sum of major diagonal: 74
The sum of minor diagonal: 194
</span>

结论

在本文中,我们已经看到了如何计算给定方阵的对角线和。 大对角线从左上角开始到右下角,小对角线从小角开始 对角线从右上角开始到左下角。要找到这些的总和 对角线元素,我们遍历所有元素。当行和列索引值都可用时 相同,表示主要对角线元素,当两个指数之和为 与 n – 1 相同,其中 n 是矩阵的顺序,它将添加到次要对角线。这 过程需要两个嵌套循环,我们正在遍历 2D 阵列。所以它将需要 O(n2) amount of time to compute the sum of two diagonals of the given matrix.

标签:major,int,sum,矩阵,diagonal,C++,对角线,minor
From: https://blog.51cto.com/10zhancom/6008365

相关文章

  • hdu:Sum of Tribonacci Numbers(带前缀和矩阵快速幂)
    ProblemDescriptionEverybodyknowsFibonaccinumbers,nowwearetalkingabouttheTribonaccinumbers:T[0]=T[1]=T[2]=1;T[n]=T[n-1]+T[n-2]+T[n......
  • 最新教程:ubuntu下学会搭载vscode C++编译环境
    首先最重要的还是要参考官网教程https://code.visualstudio.com/docs/cpp/introvideos-cpp在配置过程中要生成3个json文件①tasks.json:编译器编译任务配置文件;②......
  • C/C++显示类型转换的位拓展方式
    最近用verilator写模块的tb,在这里卡了好久(测半天都是C++写的问题)要点变量从小位宽到大位宽显示类型转换(explicitcast)时的位拓展方式,取决于转换前变量的符号性。倘若......
  • hdu: Count(矩阵快速幂)
    ProblemDescriptionFarmerJohn有n头奶牛.某天奶牛想要数一数有多少头奶牛,以一种特殊的方式:第一头奶牛为1号,第二头奶牛为2号,第三头奶牛之后,假如当前奶牛是第n头,那......
  • C++ 序列化和反序列化
    序列化1、背景1、在TCP的连接上,它传输数据的基本形式就是二进制流,也就是一段一段的1和0。2、在一般编程语言或者网络框架提供的API中,传输数据的基本形式是字节,也就是Byte......
  • C++算法日记_1A
    题目链接:https://ac.nowcoder.com/acm/contest/19859/A题目来源:牛客网题目描述请统计某个给定范围[L,R]的所有整数中,数字2出现的次数。比如......
  • C++中如何将一行字符串(一行字符串可带空格)输入到string对象中或者字符数组中?
    提供两种方法:①、使用cin的成员函数getline,代码如下:charstr1[20];cin.getline(str1,20);     //第一个参数代表字符数组的指针,第二个参数代表写入的最大长度②、......
  • C++基础教程
    C++简介C++是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。C++被认为是一种中级语言,它综合了高级语言......
  • c++ 多态
    一、什么是多态多态(Polymorphism)源自于希腊语,意思是“多种形状”。在C++中,允许通过基类型的指针或引用去访问派生对象中的函数,并允许需要执行的函数在运行时进行延迟绑......
  • hdu:Queuing(矩阵快速幂)
    ProblemDescriptionQueuesandPriorityQueuesaredatastructureswhichareknowntomostcomputerscientists.TheQueueoccursofteninourdailylife.Ther......