Найдите наименьший и наибольший элемент из диагоналей квадратной матрицы

Опубликовано: 5 Января, 2022

Для квадратной матрицы порядка n * n найдите наименьший и наибольший элементы обеих диагоналей данной матрицы.
Примеры:

 Ввод: matrix = {
            {1, 2, 3, 4, -10},
            {5, 6, 7, 8, 6},
            {1, 2, 11, 3, 4},
            {5, 6, 70, 5, 8},
            {4, 9, 7, 1, 5}};
Выход :
Наименьший элемент главной диагонали: 1
Наибольший элемент главной диагонали: 11
Вторичный диагональный наименьший элемент: -10
Наибольший элемент вторичной диагонали: 11

Идея решения этой проблемы заключается в следующем: сначала проверьте матрицу обхода и достигните всех элементов диагоналей (для основной диагонали i == j и вторичной диагонали i + j = size_of_matrix-1) и сравните диагональный элемент с переменной min и max и возьмите новые min и максимальные значения. То же самое и со второстепенными диагоналями.
Вот реализация вышеуказанного подхода:
Пример 1: С O (n ^ 2) Сложность:

C ++

// CPP program to find smallest and
// largest elements of both diagonals
#include<bits/stdc++.h>
using namespace std;
// Function to find smallest and largest element
// from principal and secondary diagonal
void diagonalsMinMax( int mat[5][5])
{
// take length of matrix
int n = sizeof (*mat) / 4;
if (n == 0)
return ;
// declare and initialize variables
// with appropriate value
int principalMin = mat[0][0],
principalMax = mat[0][0];
int secondaryMin = mat[n - 1][0],
secondaryMax = mat[n - 1][0];
for ( int i = 1; i < n; i++)
{
for ( int j = 1; j < n; j++)
{
// Condition for principal
// diagonal
if (i == j)
{
// take new smallest value
if (mat[i][j] < principalMin)
{
principalMin = mat[i][j];
}
// take new largest value
if (mat[i][j] > principalMax)
{
principalMax = mat[i][j];
}
}
// Condition for secondary
// diagonal
if ((i + j) == (n - 1))
{
// take new smallest value
if (mat[i][j] < secondaryMin)
{
secondaryMin = mat[i][j];
}
// take new largest value
if (mat[i][j] > secondaryMax)
{
secondaryMax = mat[i][j];
}
}
}
}
cout << ( "Principal Diagonal Smallest Element: " )
<< principalMin << endl;
cout << ( "Principal Diagonal Greatest Element : " )
<< principalMax << endl;
cout << ( "Secondary Diagonal Smallest Element: " )
<< secondaryMin << endl;
cout << ( "Secondary Diagonal Greatest Element: " )
<< secondaryMax << endl;
}
// Driver code
int main()
{
// Declare and initialize 5X5 matrix
int matrix[5][5] = {{ 1, 2, 3, 4, -10 },
{ 5, 6, 7, 8, 6 },
{ 1, 2, 11, 3, 4 },
{ 5, 6, 70, 5, 8 },
{ 4, 9, 7, 1, -5 }};
diagonalsMinMax(matrix);
}
// This code is contribuuted by
// Shashank_Sharma

Джава

// Java program to find
// smallest and largest elements of both diagonals
public class GFG {
// Function to find smallest and largest element from
// principal and secondary diagonal
static void diagonalsMinMax( int [][] mat)
{
// take length of matrix
int n = mat.length;
if (n == 0 )
return ;
// declare and initialize variables with appropriate value
int principalMin = mat[ 0 ][ 0 ], principalMax = mat[ 0 ][ 0 ];
int secondaryMin = mat[n- 1 ][ 0 ], secondaryMax = mat[n- 1 ][ 0 ];
for ( int i = 1 ; i < n; i++) {
for ( int j = 1 ; j < n; j++) {
// Condition for principal
// diagonal
if (i == j) {
// take new smallest value
if (mat[i][j] < principalMin) {
principalMin = mat[i][j];
}
// take new largest value
if (mat[i][j] > principalMax) {
principalMax = mat[i][j];
}
}
// Condition for secondary
// diagonal
if ((i + j) == (n - 1 )) {
// take new smallest value
if (mat[i][j] < secondaryMin) {
secondaryMin = mat[i][j];
}
// take new largest value
if (mat[i][j] > secondaryMax) {
secondaryMax = mat[i][j];
}
}
}
}
System.out.println( "Principal Diagonal Smallest Element: "
+ principalMin);
System.out.println( "Principal Diagonal Greatest Element : "
+ principalMax);
System.out.println( "Secondary Diagonal Smallest Element: "
+ secondaryMin);
System.out.println( "Secondary Diagonal Greatest Element: "
+ secondaryMax);
}
// Driver code
static public void main(String[] args)
{
// Declare and initialize 5X5 matrix
int [][] matrix = {
{ 1 , 2 , 3 , 4 , - 10 },
{ 5 , 6 , 7 , 8 , 6 },
{ 1 , 2 , 11 , 3 , 4 },
{ 5 , 6 , 70 , 5 , 8 },
{ 4 , 9 , 7 , 1 , - 5 }
};
diagonalsMinMax(matrix);
}
}

Python3

# Python3 program to find smallest and
# largest elements of both diagonals
# Function to find smallest and largest element
# from principal and secondary diagonal
def diagonalsMinMax(mat):
# take length of matrix
n = len (mat)
if (n = = 0 ):
return
# declare and initialize variables
# with appropriate value
principalMin = mat[ 0 ][ 0 ]
principalMax = mat[ 0 ][ 0 ]
secondaryMin = mat[ 0 ][n - 1 ]
secondaryMax = mat[ 0 ][n - 1 ]
for i in range ( 1 , n):
for j in range ( 1 , n):
# Condition for principal
# diagonal
if (i = = j):
# take new smallest value
if (mat[i][j] < principalMin):
principalMin = mat[i][j]
# take new largest value
if (mat[i][j] > principalMax):
principalMax = mat[i][j]
# Condition for secondary
# diagonal
if ((i + j) = = (n - 1 )):
# take new smallest value
if (mat[i][j] < secondaryMin):
secondaryMin = mat[i][j]
# take new largest value
if (mat[i][j] > secondaryMax):
secondaryMax = mat[i][j]
print ( "Principal Diagonal Smallest Element: " ,
principalMin)
print ( "Principal Diagonal Greatest Element : " ,
principalMax)
print ( "Secondary Diagonal Smallest Element: " ,
secondaryMin)
print ( "Secondary Diagonal Greatest Element: " ,
secondaryMax)
# Driver code
# Declare and initialize 5X5 matrix
matrix = [[ 1 , 2 , 3 , 4 , - 10 ],
[ 5 , 6 , 7 , 8 , 6 ],
[ 1 , 2 , 11 , 3 , 4 ],
[ 5 , 6 , 70 , 5 , 8 ],
[ 4 , 9 , 7 , 1 , - 5 ]]
diagonalsMinMax(matrix)
# This code is contributed by Mohit kumar 29

C #

// C# program to find smallest and largest
// elements of both diagonals
using System;
public class GFG {
// Function to find smallest and largest element from
// principal and secondary diagonal
static void diagonalsMinMax( int [,] mat)
{
// take length of square matrix
int n = mat.GetLength(0);
if (n == 0)
return ;
// declare and initialize variables with appropriate value
int principalMin = mat[0,0], principalMax = mat[0,0];
int secondaryMin = mat[n-1,0], secondaryMax = mat[n-1,0];
for ( int i = 1; i < n; i++) {
for ( int j = 1; j < n; j++) {
// Condition for principal
// diagonal
if (i == j) {
// take new smallest value
if (mat[i,j] < principalMin) {
principalMin = mat[i,j];
}
// take new largest value
if (mat[i,j] > principalMax) {
principalMax = mat[i,j];
}
}
// Condition for secondary
// diagonal
if ((i + j) == (n - 1)) {
// take new smallest value
if (mat[i,j] < secondaryMin) {
secondaryMin = mat[i,j];
}
// take new largest value
if (mat[i,j] > secondaryMax) {
secondaryMax = mat[i,j];
}
}
}
}
Console.WriteLine( "Principal Diagonal Smallest Element: "
+ principalMin);
Console.WriteLine( "Principal Diagonal Greatest Element : "
+ principalMax);
Console.WriteLine( "Secondary Diagonal Smallest Element: "
+ secondaryMin);
Console.WriteLine( "Secondary Diagonal Greatest Element: "
+ secondaryMax);
}
// Driver code
static void Main()
{
// Declare and initialize 5X5 matrix
int [,] matrix = {
{ 1, 2, 3, 4, -10 },
{ 5, 6, 7, 8, 6 },
{ 1, 2, 11, 3, 4 },
{ 5, 6, 70, 5, 8 },
{ 4, 9, 7, 1, -5 }
};
diagonalsMinMax(matrix);
}
// This code is contributed by Ryuga
}

PHP

<?php
// PHP program to find smallest and
// largest elements of both diagonals
// Function to find smallest and largest element
// from principal and secondary diagonal
function diagonalsMinMax( $mat )
{
// take length of $matrix
$n = count ( $mat );
if ( $n == 0)
return ;
// declare and initialize variables
// with appropriate value
$principalMin = $mat [0][0];
$principalMax = $mat [0][0];
$secondaryMin = $mat [ $n - 1][0];
$secondaryMax = $mat [ $n - 1][0];
for ( $i = 1; $i < $n ; $i ++)
{
for ( $j = 1; $j < $n ; $j ++)
{
// Condition for principal
// diagonal
if ( $i == $j )
{
// take new smallest value
if ( $mat [ $i ][ $j ] < $principalMin )
{
$principalMin = $mat [ $i ][ $j ];
}
// take new largest value
if ( $mat [ $i ][ $j ] > $principalMax )
{
$principalMax = $mat [ $i ][ $j ];
}
}
// Condition for secondary
// diagonal
if (( $i + $j ) == ( $n - 1))
{
// take new smallest value
if ( $mat [ $i ][ $j ] < $secondaryMin )
{
$secondaryMin = $mat [ $i ][ $j ];
}
// take new largest value
if ( $mat [ $i ][ $j ] > $secondaryMax )
{
$secondaryMax = $mat [ $i ][ $j ];
}
}
}
}
echo "Principal Diagonal Smallest Element: " ,
$principalMin , " " ;
echo "Principal Diagonal Greatest Element : " ,
$principalMax , " " ;
echo "Secondary Diagonal Smallest Element: " ,
$secondaryMin , " " ;
echo "Secondary Diagonal Greatest Element: " ,
$secondaryMax , " " ;
}
// Driver code
// Declare and initialize 5X5 matrix
$matrix = array ( array ( 1, 2, 3, 4, -10 ),
array ( 5, 6, 7, 8, 6 ),
array ( 1, 2, 11, 3, 4 ),
array ( 5, 6, 70, 5, 8 ),
array ( 4, 9, 7, 1, -5 ));
diagonalsMinMax( $matrix );
// This code is contributed by
// ihritik
?>