Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given a 2D square matrix, find the sum of elements in Principal and Secondary diagonals. For example, consider the following 4 X 4 input matrix.
A00 A01 A02 A03 A10 A11 A12 A13 A20 A21 A22 A23 A30 A31 A32 A33
The primary diagonal is formed by the elements A00, A11, A22, A33.
- Condition for Principal Diagonal: The row-column condition is row = column.
The secondary diagonal is formed by the elements A03, A12, A21, A30. - Condition for Secondary Diagonal: The row-column condition is row = numberOfRows – column -1.
Examples :
Input : 4 1 2 3 4 4 3 2 1 7 8 9 6 6 5 4 3 Output : Principal Diagonal: 16 Secondary Diagonal: 20 Input : 3 1 1 1 1 1 1 1 1 1 Output : Principal Diagonal: 3 Secondary Diagonal: 3
Method 1: In this method, we use two loops i.e. a loop for columns and a loop for rows and in the inner loop we check for the condition stated above:
Implementation:
C
#include <stdio.h>
const
int
M = 4;
const
int
N = 4;
void
printDiagonalSums(
int
mat[M][N])
{
int
principal = 0, secondary = 0;
for
(
int
i = 0; i < M; i++)
{
for
(
int
j = 0; j < N; j++)
{
if
(i == j)
principal += mat[i][j];
if
((i + j) == (N - 1))
secondary += mat[i][j];
}
}
printf
(
"%s"
,
"Principal Diagonal:"
);
printf
(
"%dn"
, principal);
printf
(
"%s"
,
"Secondary Diagonal:"
);
printf
(
"%dn"
, secondary);
}
int
main()
{
int
a[][4] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{1, 2, 3, 4},
{5, 6, 7, 8}};
printDiagonalSums(a);
return
0;
}
C++
#include <bits/stdc++.h>
using
namespace
std;
const
int
MAX = 100;
void
printDiagonalSums(
int
mat[][MAX],
int
n)
{
int
principal = 0, secondary = 0;
for
(
int
i = 0; i < n; i++) {
for
(
int
j = 0; j < n; j++) {
if
(i == j)
principal += mat[i][j];
if
((i + j) == (n - 1))
secondary += mat[i][j];
}
}
cout <<
"Principal Diagonal:"
<< principal << endl;
cout <<
"Secondary Diagonal:"
<< secondary << endl;
}
int
main()
{
int
a[][MAX] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 },
{ 1, 2, 3, 4 }, { 5, 6, 7, 8 } };
printDiagonalSums(a, 4);
return
0;
}
Java
import
java.io.*;
public
class
GFG {
static
void
printDiagonalSums(
int
[][]mat,
int
n)
{
int
principal =
0
, secondary =
0
;
for
(
int
i =
0
; i < n; i++) {
for
(
int
j =
0
; j < n; j++) {
if
(i == j)
principal += mat[i][j];
if
((i + j) == (n -
1
))
secondary += mat[i][j];
}
}
System.out.println(
"Principal Diagonal:"
+ principal);
System.out.println(
"Secondary Diagonal:"
+ secondary);
}
static
public
void
main (String[] args)
{
int
[][]a = { {
1
,
2
,
3
,
4
},
{
5
,
6
,
7
,
8
},
{
1
,
2
,
3
,
4
},
{
5
,
6
,
7
,
8
} };
printDiagonalSums(a,
4
);
}
}
Python3
MAX
=
100
def
printDiagonalSums(mat, n):
principal
=
0
secondary
=
0
;
for
i
in
range
(
0
, n):
for
j
in
range
(
0
, n):
if
(i
=
=
j):
principal
+
=
mat[i][j]
if
((i
+
j)
=
=
(n
-
1
)):
secondary
+
=
mat[i][j]
print
(
"Principal Diagonal:"
, principal)
print
(
"Secondary Diagonal:"
, secondary)
a
=
[[
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
],
[
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
]]
printDiagonalSums(a,
4
)
C#
using
System;
public
class
GFG {
static
void
printDiagonalSums(
int
[,]mat,
int
n)
{
int
principal = 0, secondary = 0;
for
(
int
i = 0; i < n; i++) {
for
(
int
j = 0; j < n; j++) {
if
(i == j)
principal += mat[i,j];
if
((i + j) == (n - 1))
secondary += mat[i,j];
}
}
Console.WriteLine(
"Principal Diagonal:"
+ principal);
Console.WriteLine(
"Secondary Diagonal:"
+ secondary);
}
static
public
void
Main ()
{
int
[,]a = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 } };
printDiagonalSums(a, 4);
}
}
PHP
<?php
$MAX
= 100;
function
printDiagonalSums(
$mat
,
$n
)
{
global
$MAX
;
$principal
= 0;
$secondary
= 0;
for
(
$i
= 0;
$i
<
$n
;
$i
++)
{
for
(
$j
= 0;
$j
<
$n
;
$j
++)
{
if
(
$i
==
$j
)
$principal
+=
$mat
[
$i
][
$j
];
if
((
$i
+
$j
) == (
$n
- 1))
$secondary
+=
$mat
[
$i
][
$j
];
}
}
echo
"Principal Diagonal:"
,
$principal
,
"n"
;
echo
"Secondary Diagonal:"
,
$secondary
,
"n"
;
}
$a
=
array
(
array
( 1, 2, 3, 4 ),
array
( 5, 6, 7, 8 ),
array
( 1, 2, 3, 4 ),
array
( 5, 6, 7, 8 ));
printDiagonalSums(
$a
, 4);
?>
Javascript
<script>
const MAX = 100;
void printDiagonalSums(mat, n)
{
let principal = 0, secondary = 0;
for
(let i = 0; i < n; i++) {
for
(let j = 0; j < n; j++) {
if
(i == j)
principal += mat[i][j];
if
((i + j) == (n - 1))
secondary += mat[i][j];
}
}
document.write(
"Principal Diagonal:"
+ principal +
"<br>"
);
document.write(
"Secondary Diagonal:"
+ secondary +
"<br>"
);
}
let a = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ],
[ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ] ];
printDiagonalSums(a, 4);
</script>
Output
Principal Diagonal:18 Secondary Diagonal:18
Time Complexity: O(N*N), as we are using nested loops to traverse N*N times.
Auxiliary Space: O(1), as we are not using any extra space.
Method 2( Efficient Approach): In this method, we use one loop i.e. a loop for calculating the sum of both the principal and secondary diagonals:
Implementation:
C
#include <stdio.h>
#include <stdlib.h>
const
int
M = 4;
const
int
N = 4;
void
printDiagonalSums(
int
mat[M][N])
{
int
principal = 0, secondary = 0;
for
(
int
i = 0; i < N; i++)
{
principal += mat[i][i];
secondary += mat[i][N - i - 1];
}
printf
(
"%s"
,
"Principal Diagonal:"
);
printf
(
"%dn"
, principal);
printf
(
"%s"
,
"Secondary Diagonal:"
);
printf
(
"%dn"
, secondary);
}
int
main()
{
int
a[4][4] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{1, 2, 3, 4},
{5, 6, 7, 8}};
printDiagonalSums(a);
return
0;
}
C++
#include <bits/stdc++.h>
using
namespace
std;
const
int
MAX = 100;
void
printDiagonalSums(
int
mat[][MAX],
int
n)
{
int
principal = 0, secondary = 0;
for
(
int
i = 0; i < n; i++) {
principal += mat[i][i];
secondary += mat[i][n - i - 1];
}
cout <<
"Principal Diagonal:"
<< principal << endl;
cout <<
"Secondary Diagonal:"
<< secondary << endl;
}
int
main()
{
int
a[][MAX] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 },
{ 1, 2, 3, 4 }, { 5, 6, 7, 8 } };
printDiagonalSums(a, 4);
return
0;
}
Java
import
java.io.*;
public
class
GFG {
static
void
printDiagonalSums(
int
[][]mat,
int
n)
{
int
principal =
0
, secondary =
0
;
for
(
int
i =
0
; i < n; i++) {
principal += mat[i][i];
secondary += mat[i][n - i -
1
];
}
System.out.println(
"Principal Diagonal:"
+ principal);
System.out.println(
"Secondary Diagonal:"
+ secondary);
}
static
public
void
main (String[] args)
{
int
[][]a = { {
1
,
2
,
3
,
4
},
{
5
,
6
,
7
,
8
},
{
1
,
2
,
3
,
4
},
{
5
,
6
,
7
,
8
} };
printDiagonalSums(a,
4
);
}
}
Python3
MAX
=
100
def
printDiagonalSums(mat, n):
principal
=
0
secondary
=
0
for
i
in
range
(
0
, n):
principal
+
=
mat[i][i]
secondary
+
=
mat[i][n
-
i
-
1
]
print
(
"Principal Diagonal:"
, principal)
print
(
"Secondary Diagonal:"
, secondary)
a
=
[[
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
],
[
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
]]
printDiagonalSums(a,
4
)
C#
using
System;
public
class
GFG {
static
void
printDiagonalSums(
int
[,]mat,
int
n)
{
int
principal = 0, secondary = 0;
for
(
int
i = 0; i < n; i++) {
principal += mat[i,i];
secondary += mat[i,n - i - 1];
}
Console.WriteLine(
"Principal Diagonal:"
+ principal);
Console.WriteLine(
"Secondary Diagonal:"
+ secondary);
}
static
public
void
Main ()
{
int
[,]a = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 } };
printDiagonalSums(a, 4);
}
}
PHP
<?php
$MAX
= 100;
function
printDiagonalSums(
$mat
,
$n
)
{
global
$MAX
;
$principal
= 0;
$secondary
= 0;
for
(
$i
= 0;
$i
<
$n
;
$i
++)
{
$principal
+=
$mat
[
$i
][
$i
];
$secondary
+=
$mat
[
$i
][
$n
-
$i
- 1];
}
echo
"Principal Diagonal:"
,
$principal
,
"n"
;
echo
"Secondary Diagonal:"
,
$secondary
,
"n"
;
}
$a
=
array
(
array
(1, 2, 3, 4),
array
(5, 6, 7, 8),
array
(1, 2, 3, 4),
array
(5, 6, 7, 8));
printDiagonalSums(
$a
, 4);
?>
Javascript
<script>
function
printDiagonalSums(mat,n)
{
let principal = 0, secondary = 0;
for
(let i = 0; i < n; i++) {
principal += mat[i][i];
secondary += mat[i][n - i - 1];
}
document.write(
"Principal Diagonal:"
+ principal+
"<br>"
);
document.write(
"Secondary Diagonal:"
+ secondary);
}
let a = [[ 1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ]];
printDiagonalSums(a, 4);
</script>
Output
Principal Diagonal:18 Secondary Diagonal:18
Time Complexity: O(N), as we are using a loop to traverse N times.
Auxiliary Space: O(1), as we are not using any extra space.
This article is contributed by Mohak Agrawal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Last Updated :
27 Sep, 2022
Like Article
Save Article
Перейти к содержанию
Сумма диагоналей матрицы
На чтение 1 мин. Просмотров 11 Опубликовано 17.11.2022
Если задана квадратная матрица mat
, верните сумму диагоналей матрицы.
Включайте только сумму всех элементов на первичной диагонали и всех элементов на вторичной диагонали, которые не являются частью первичной диагонали.
Пример 1:
Входные данные: mat = [[1,2,3],
[4,5,6],
[7,8,9]]
Выход: 25
Пояснение: Сумма диагоналей: 1 + 5 + 9 + 3 + 7 = 25
Обратите внимание, что элемент mat[1][1] = 5 учитывается только один раз.
Пример 2:
Входные данные: mat = [[1,1,1,1],
[1,1,1,1],
[1,1,1,1],
[1,1,1,1]]
Выход: 8
Пример 3:
Вход: mat = [[5]]
Выход: 5
Ограничения:
-
n == mat.length == mat[i].length
-
1 <= n <= 100
-
1 <= mat[i][j] <= 100
РЕШЕНИЕ:
class Solution:
def diagonalSum(self, mat: List[List[int]]) -> int:
n = len(mat)
total = -mat[n//2][n//2] if n & 1 else 0
for i in range(n):
total += mat[i][i] + mat[i][n-i-1]
return total
Войдите в полноэкранный режим Выйти из полноэкранного режима
Перейти к содержанию
Вычислить сумму элементов главной или побочной диагонали матрицы
Просмотров 9.6к. Обновлено 15 октября 2021
Дана квадратная матрица. Вычислить сумму элементов главной или побочной диагонали в зависимости от выбора пользователя. Сумма элементов любой диагонали должна вычисляться в одной и той же функции.
В функцию следует передавать не только массив, но и информацию о том, что требуется вычислить, выраженную через тот или иной символ или число.
Если была выбрана сумма главной диагонали, то при определении ее элементов второй индекс матрицы будет равен первому и начинаться с первого элемента. В случае побочной диагонали второй индекс будет начинаться с последнего элемента и заканчиваться первым. Поэтому в теле функции перед проходом по матрице второму индексу присваивается либо 1 (или 0), либо размерность квадратной матрицы (N или N-1). При проходе второй индекс либо увеличивается на каждой итерации, либо уменьшается.
Pascal
const N = 10;
type
type_arr = array[1..N, 1..N] of byte;var
arr: type_arr;
i, j: byte;
sum: byte;
ch: char;function diagonal (var arr1: type_arr; c: char): byte;
var
sum1: byte;
i, j: byte;
begin
sum1 := 0;
if c = '1' then j := 1
else j:= N;
for i:=1 to N do begin
sum1 := sum1 + arr1[i][j];
if c = '1' then j := j + 1
else j := j-1;
end;
diagonal := sum1;
end;begin
randomize;
for i:=1 to N do begin
for j:=1 to N do begin
arr[i,j] := random(10);
write(arr[i,j]:4);
end;
writeln;
end;
write('Главная (1) или побочная (2): ');
readln(ch);
if (ch = '1') or (ch = '2') then begin
sum := diagonal(arr, ch);
writeln(sum);
end;
end.
Пример(ы) выполнения программы на языке Pascal:0 2 0 4 8 0 4 1 5 1
1 7 7 0 1 7 8 4 7 7
1 0 7 4 6 5 0 6 4 7
1 5 3 3 0 4 6 7 8 0
1 7 3 8 1 6 9 4 4 7
8 5 7 7 1 7 8 8 8 4
2 0 1 3 1 5 2 0 0 8
4 8 3 7 5 6 5 1 3 9
9 0 9 2 1 0 3 6 1 3
8 3 7 5 8 8 9 5 1 1
Главная (1) или побочная (2): 2
41
Язык Си
#include < stdio.h>
#define N 10
int diagonal(char c);
int a[N][N];main() {
int i, j, sum;
char ch;
srand(time(NULL));
for (i=0; i< N; i++) {
for (j=0; j< N; j++) {
a[i][j] = rand() % 10;
printf("%3d", a[i][j]);
}
printf("n");
}
printf("Главная (1) или побочная (2): ");
scanf("%c", &ch);
sum = diagonal(ch);
printf("%dn", sum);
}int diagonal(char c) {
int s, i, j;
s = 0;
if (c == '1')
for (i=0; i< N; i++)
s += a[i][i];
else
for (i=0, j=N-1; i< N; i++,j--)
s += a[i][j];
return s;
}
Python
сумма элементов главной диагонали матрицы python
def diagonal(l,c):
s = 0
i = 0
while i < N:
if c == '1':
s += l[i][i]
else:
s += l[i][N-i-1]
i += 1
return sfrom random import random
N = 10
a = []
for i in range(N):
b = []
for j in range(N):
n = int(random()*10)
b.append(n)
print("%3d" % n, end='')
a.append(b)
print()ch = input("Главная (1) или побочная (2): ")
if ch == '1' or ch == '2':
summa = diagonal(a,ch)
print(summa)
КуМир
цел N = 7
цел таб a[1:N,1:N]
алг
нач
цел i, j, sum
сим ch
нц для i от 1 до N
нц для j от 1 до N
a[i,j] := int(rand(0,10))
вывод a[i,j], " "
кц
вывод нс
кц
вывод "Главная (г) или побочная (п): "
ввод ch
если ch = "г" или ch = "п" то
sum := diag(ch)
вывод sum
все
коналг цел diag(сим c)
нач
цел s, i, j
s := 0
нц для i от 1 до N
если c = "г" то
s := s + a[i,i]
иначе
s := s + a[i,N-i+1]
все
кц
знач := s
кон
Составим квадратную матрицу из случайных чисел и запишем в таблицу Эксель начиная с ячейки C3.
Если размер матрицы 5х5 то вся матрица займёт диапазон C3:G7
Для наглядности можно выделить ячейки диагонали см Как в таблице Excel выделить диагональ другим цветом?
Придется воспользоваться формулой массива с выбором из всего диапазана ячеек у которых номер строки равен номеру столбца
Для нашей таблицы
номер строки можно вычислить по формуле =СТРОКА()-СТРОКА(С3)
номер столбца можно вычислить по формуле =СТООЛБЕЦ()-СТООЛБЕЦ(С3)
Суммируемое выражение:
ЕСЛИ( (СТРОКА(C3:G7) — СТРОКА(C3)) = (СТОЛБЕЦ(C3:G7) — СТОЛБЕЦ(C3)); C3:G7;0)
Общая формула массива для суммы элементов главной диагонали таблицы для диапазона C3:C7 выглядит так:
=СУММ( ЕСЛИ( (СТРОКА(C3:G7) — СТРОКА(C3)) = (СТОЛБЕЦ(C3:G7) — СТОЛБЕЦ(C3)); C3:G7;0))
ввод ограничиваем одновременным нажатием клавиш CTRL+SHIFT+ENTER (фигурные скобки появятся сами):
Нахождение суммы элементов главной диагонали матрицы
Для нахождения суммы элементов главной диагонали матрицы (след матрицы) выберите нужный размер исходной матрицы и заполните её элементы.
Другие онлайн калькуляторы
- Транспонирование матрицы
- Нахождение союзной матрицы
- Нахождение обратной матрицы
- Вычисление определителя матрицы
- Приведение матрицы к треугольному виду
- Возведение матрицы в степень
- Вычисление ранга матрицы
- Сложение матриц
- Вычитание матриц
- Умножение матриц
- Умножение матрицы на число
Описание онлайн калькулятора
С помощью данного онлайн калькулятора Вы сможете найти сумму элементов главной диагонали матрицы (след матрицы) или проверить правильность своего решения.
Для нахождения суммы элементов главной диагонали матрицы (след матрицы), исходная матрица должна быть квадратной.
Описание работы онлайн калькулятора
- Минимальный размер матрицы 2х2;
- Максимальный размер матрицы 10х10;
- В поля ввода значений элементов матриц, можно вводить следующие типы чисел:
- Натуральные (0; 3; 9);
- Отрицательные (-43);
- Десятичные (1,5 или 1.5);
- Дробные (2/3).
- Максимальное количество вводимых символов 7;
- При нажатии кнопки «Вывести результат»
выводится результат требуемой операции.
Свои вопросы по работе данного онлайн калькулятора, Вы всегда можете задать в комментариях.