📜  打印矩阵对角线的程序

📅  最后修改于: 2022-05-13 01:57:23.284000             🧑  作者: Mango

打印矩阵对角线的程序

给定一个二维方阵,打印主对角线和辅助对角线。

例子 :

Input: 
4
1 2 3 4
4 3 2 1
7 8 9 6
6 5 4 3
Output:
Principal Diagonal: 1, 3, 9, 3
Secondary Diagonal: 4, 2, 8, 6

Input:
3
1 1 1
1 1 1
1 1 1
Output:
Principal Diagonal: 1, 1, 1
Secondary Diagonal: 1, 1, 1

例如,考虑以下 4 X 4 输入矩阵。

A00 A01 A02 A03
A10 A11 A12 A13
A20 A21 A22 A23
A30 A31 A32 A33
  • 主对角线由元素 A00、A11、A22、A33 形成。
    主对角线的条件:
The row-column condition is row = column.
  • 次对角线由元素 A03、A12、A21、A30 形成。
    次对角线的条件:
The row-column condition is row = numberOfRows - column -1.

方法一:
在这种方法中,我们使用两个循环,即一个用于列的循环和一个用于行的循环,并且在内部循环中我们检查上述条件。

C++
// C++ Program to print the Diagonals of a Matrix
 
#include 
using namespace std;
 
const int MAX = 100;
 
// Function to print the Principal Diagonal
void printPrincipalDiagonal(int mat[][MAX], int n)
{
    cout << "Principal Diagonal: ";
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
 
            // Condition for principal diagonal
            if (i == j)
                cout << mat[i][j] << ", ";
        }
    }
    cout << endl;
}
 
// Function to print the Secondary Diagonal
void printSecondaryDiagonal(int mat[][MAX], int n)
{
    cout << "Secondary Diagonal: ";
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
 
            // Condition for secondary diagonal
            if ((i + j) == (n - 1))
                cout << mat[i][j] << ", ";
        }
    }
    cout << endl;
}
 
// Driver code
int main()
{
    int n = 4;
    int a[][MAX] = { { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 },
                     { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 } };
 
    printPrincipalDiagonal(a, n);
    printSecondaryDiagonal(a, n);
    return 0;
}


Java
// Java Program to print the Diagonals of a Matrix
class GFG {
    static int MAX = 100;
 
    // Function to print the Principal Diagonal
    static void printPrincipalDiagonal(int mat[][], int n)
    {
        System.out.print("Principal Diagonal: ");
 
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
 
                // Condition for principal diagonal
                if (i == j) {
                    System.out.print(mat[i][j] + ", ");
                }
            }
        }
        System.out.println("");
    }
 
    // Function to print the Secondary Diagonal
    static void printSecondaryDiagonal(int mat[][], int n)
    {
        System.out.print("Secondary Diagonal: ");
 
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
 
                // Condition for secondary diagonal
                if ((i + j) == (n - 1)) {
                    System.out.print(mat[i][j] + ", ");
                }
            }
        }
        System.out.println("");
    }
 
    // Driver code
    public static void main(String args[])
    {
        int n = 4;
        int a[][] = { { 1, 2, 3, 4 },
                      { 5, 6, 7, 8 },
                      { 1, 2, 3, 4 },
                      { 5, 6, 7, 8 } };
 
        printPrincipalDiagonal(a, n);
        printSecondaryDiagonal(a, n);
    }
}
 
// This code is contributed by Rajput-Ji


Python3
# Python3 Program to print the Diagonals of a Matrix
MAX = 100
 
# Function to print the Principal Diagonal
def printPrincipalDiagonal(mat, n):
    print("Principal Diagonal: ", end = "")
 
    for i in range(n):
        for j in range(n):
 
            # Condition for principal diagonal
            if (i == j):
                print(mat[i][j], end = ", ")
    print()
 
# Function to print the Secondary Diagonal
def printSecondaryDiagonal(mat, n):
    print("Secondary Diagonal: ", end = "")
 
    for i in range(n):
        for j in range(n):
 
            # Condition for secondary diagonal
            if ((i + j) == (n - 1)):
                print(mat[i][j], end = ", ")
    print()
 
# Driver code
n = 4
a = [[ 1, 2, 3, 4 ],
     [ 5, 6, 7, 8 ],
     [ 1, 2, 3, 4 ],
     [ 5, 6, 7, 8 ]]
 
printPrincipalDiagonal(a, n)
printSecondaryDiagonal(a, n)
 
# This code is contributed by Mohit Kumar


C#
// C# Program to print the Diagonals of a Matrix
using System;
 
class GFG {
    static int MAX = 100;
 
    // Function to print the Principal Diagonal
    static void printPrincipalDiagonal(int[, ] mat, int n)
    {
        Console.Write("Principal Diagonal: ");
 
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
 
                // Condition for principal diagonal
                if (i == j) {
                    Console.Write(mat[i, j] + ", ");
                }
            }
        }
        Console.WriteLine("");
    }
 
    // Function to print the Secondary Diagonal
    static void printSecondaryDiagonal(int[, ] mat, int n)
    {
        Console.Write("Secondary Diagonal: ");
 
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
 
                // Condition for secondary diagonal
                if ((i + j) == (n - 1)) {
                    Console.Write(mat[i, j] + ", ");
                }
            }
        }
        Console.WriteLine("");
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int n = 4;
        int[, ] a = { { 1, 2, 3, 4 },
                      { 5, 6, 7, 8 },
                      { 1, 2, 3, 4 },
                      { 5, 6, 7, 8 } };
 
        printPrincipalDiagonal(a, n);
        printSecondaryDiagonal(a, n);
    }
}
 
// This code is contributed by 29AjayKumar


Javascript


C++
// C++ Program to print the Diagonals of a Matrix
 
#include 
using namespace std;
 
const int MAX = 100;
 
// Function to print the Principal Diagonal
void printPrincipalDiagonal(int mat[][MAX], int n)
{
    cout << "Principal Diagonal: ";
 
    for (int i = 0; i < n; i++) {
        // Printing principal diagonal
        cout << mat[i][i] << ", ";
    }
    cout << endl;
}
 
// Function to print the Secondary Diagonal
void printSecondaryDiagonal(int mat[][MAX], int n)
{
    cout << "Secondary Diagonal: ";
    int k = n - 1;
    for (int i = 0; i < n; i++) {
        // Printing secondary diagonal
        cout << mat[i][k--] << ", ";
    }
    cout << endl;
}
 
// Driver code
int main()
{
    int n = 4;
    int a[][MAX] = { { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 },
                     { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 } };
 
    printPrincipalDiagonal(a, n);
    printSecondaryDiagonal(a, n);
    return 0;
}
 
// This code is contributed by yashbeersingh42


Java
// Java Program to print the
// Diagonals of a Matrix
class Main{
   
static int MAX = 100;
     
// Function to print the Principal Diagonal
public static void printPrincipalDiagonal(int mat[][],
                                          int n)
{
  System.out.print("Principal Diagonal: ");
 
  for (int i = 0; i < n; i++)
  {
    // Printing principal diagonal
    System.out.print(mat[i][i] + ", ");
  }
  System.out.println();
}
 
// Function to print the Secondary Diagonal
public static void printSecondaryDiagonal(int mat[][],
                                          int n)
{
  System.out.print("Secondary Diagonal: ");
  int k = n - 1;
   
  for (int i = 0; i < n; i++)
  {
    // Printing secondary diagonal
    System.out.print(mat[i][k--] + ", ");
  }
  System.out.println();
}
 
public static void main(String[] args)
{
  int n = 4;
  int a[][] = {{1, 2, 3, 4},
               {5, 6, 7, 8},
               {1, 2, 3, 4},
               {5, 6, 7, 8}};
  printPrincipalDiagonal(a, n);
  printSecondaryDiagonal(a, n);
}
}
 
// This code is contributed by divyeshrabadiya07


Python3
# Python3 program to print the
# Diagonals of a Matrix
MAX = 100
 
# Function to print the Principal Diagonal
def printPrincipalDiagonal(mat, n):
 
    print("Principal Diagonal: ", end = "")
 
    for i in range(n):
         
        # Printing principal diagonal
        print(mat[i][i], end = ", ")
 
    print()
 
# Function to print the Secondary Diagonal
def printSecondaryDiagonal(mat, n):
 
    print("Secondary Diagonal: ", end = "")
    k = n - 1
     
    for i in range(n):
         
        # Printing secondary diagonal
        print(mat[i][k], end = ", ")
        k -= 1
 
    print()
     
# Driver Code
n = 4
a = [ [ 1, 2, 3, 4 ],
      [ 5, 6, 7, 8 ],
      [ 1, 2, 3, 4 ],
      [ 5, 6, 7, 8 ] ]
 
printPrincipalDiagonal(a, n)
printSecondaryDiagonal(a, n)
 
# This code is contributed by divyesh072019


C#
// C# program for the
// above approach
using System;
class GFG{
     
// Function to print the
// Principal Diagonal
static void printPrincipalDiagonal(int [,]mat,
                                   int n)
{
  Console.Write("Principal Diagonal: ");
 
  for (int i = 0; i < n; i++)
  {
    // Printing principal diagonal
    Console.Write(mat[i, i] + ", ");
  }
  Console.Write("\n");
}
  
// Function to print the
// Secondary Diagonal
static void printSecondaryDiagonal(int [,]mat,
                                   int n)
{
  Console.Write("Secondary Diagonal: ");
  int k = n - 1;
   
  for (int i = 0; i < n; i++)
  {
    // Printing secondary diagonal
    Console.Write(mat[i, k--] + ", ");
  }
   
  Console.Write("\n");
}
     
     
// Driver code
static void Main()
{
  int n = 4;
  int [,]a = {{1, 2, 3, 4},
              {5, 6, 7, 8},
              {1, 2, 3, 4},
              {5, 6, 7, 8}};
  printPrincipalDiagonal(a, n);
  printSecondaryDiagonal(a, n);
}
}
 
// This code is contributed by rutvik_56


Javascript


输出:

Principal Diagonal: 1, 6, 3, 8, 
Secondary Diagonal: 4, 7, 2, 5,

复杂度分析:

  • 时间复杂度: O(n 2 )。
    由于涉及嵌套循环,因此时间复杂度为平方。
  • 辅助空间: O(1)。
    因为没有额外的空间被占用。

方法二:
在这种方法中,使用单个 for 循环可以实现打印对角元素的相同条件。
方法:

  1. 对于主对角线元素:运行 for 循环直到n ,其中n列数,并打印array[i][i] ,其中i是索引变量。
  2. 对于次对角元素:运行 for 循环直到n ,其中n是列数并打印array[i][k] ,其中i是索引变量, k = array_length – 1 。减少k直到i < n

下面是上述方法的实现。

C++

// C++ Program to print the Diagonals of a Matrix
 
#include 
using namespace std;
 
const int MAX = 100;
 
// Function to print the Principal Diagonal
void printPrincipalDiagonal(int mat[][MAX], int n)
{
    cout << "Principal Diagonal: ";
 
    for (int i = 0; i < n; i++) {
        // Printing principal diagonal
        cout << mat[i][i] << ", ";
    }
    cout << endl;
}
 
// Function to print the Secondary Diagonal
void printSecondaryDiagonal(int mat[][MAX], int n)
{
    cout << "Secondary Diagonal: ";
    int k = n - 1;
    for (int i = 0; i < n; i++) {
        // Printing secondary diagonal
        cout << mat[i][k--] << ", ";
    }
    cout << endl;
}
 
// Driver code
int main()
{
    int n = 4;
    int a[][MAX] = { { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 },
                     { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 } };
 
    printPrincipalDiagonal(a, n);
    printSecondaryDiagonal(a, n);
    return 0;
}
 
// This code is contributed by yashbeersingh42

Java

// Java Program to print the
// Diagonals of a Matrix
class Main{
   
static int MAX = 100;
     
// Function to print the Principal Diagonal
public static void printPrincipalDiagonal(int mat[][],
                                          int n)
{
  System.out.print("Principal Diagonal: ");
 
  for (int i = 0; i < n; i++)
  {
    // Printing principal diagonal
    System.out.print(mat[i][i] + ", ");
  }
  System.out.println();
}
 
// Function to print the Secondary Diagonal
public static void printSecondaryDiagonal(int mat[][],
                                          int n)
{
  System.out.print("Secondary Diagonal: ");
  int k = n - 1;
   
  for (int i = 0; i < n; i++)
  {
    // Printing secondary diagonal
    System.out.print(mat[i][k--] + ", ");
  }
  System.out.println();
}
 
public static void main(String[] args)
{
  int n = 4;
  int a[][] = {{1, 2, 3, 4},
               {5, 6, 7, 8},
               {1, 2, 3, 4},
               {5, 6, 7, 8}};
  printPrincipalDiagonal(a, n);
  printSecondaryDiagonal(a, n);
}
}
 
// This code is contributed by divyeshrabadiya07

蟒蛇3

# Python3 program to print the
# Diagonals of a Matrix
MAX = 100
 
# Function to print the Principal Diagonal
def printPrincipalDiagonal(mat, n):
 
    print("Principal Diagonal: ", end = "")
 
    for i in range(n):
         
        # Printing principal diagonal
        print(mat[i][i], end = ", ")
 
    print()
 
# Function to print the Secondary Diagonal
def printSecondaryDiagonal(mat, n):
 
    print("Secondary Diagonal: ", end = "")
    k = n - 1
     
    for i in range(n):
         
        # Printing secondary diagonal
        print(mat[i][k], end = ", ")
        k -= 1
 
    print()
     
# Driver Code
n = 4
a = [ [ 1, 2, 3, 4 ],
      [ 5, 6, 7, 8 ],
      [ 1, 2, 3, 4 ],
      [ 5, 6, 7, 8 ] ]
 
printPrincipalDiagonal(a, n)
printSecondaryDiagonal(a, n)
 
# This code is contributed by divyesh072019

C#

// C# program for the
// above approach
using System;
class GFG{
     
// Function to print the
// Principal Diagonal
static void printPrincipalDiagonal(int [,]mat,
                                   int n)
{
  Console.Write("Principal Diagonal: ");
 
  for (int i = 0; i < n; i++)
  {
    // Printing principal diagonal
    Console.Write(mat[i, i] + ", ");
  }
  Console.Write("\n");
}
  
// Function to print the
// Secondary Diagonal
static void printSecondaryDiagonal(int [,]mat,
                                   int n)
{
  Console.Write("Secondary Diagonal: ");
  int k = n - 1;
   
  for (int i = 0; i < n; i++)
  {
    // Printing secondary diagonal
    Console.Write(mat[i, k--] + ", ");
  }
   
  Console.Write("\n");
}
     
     
// Driver code
static void Main()
{
  int n = 4;
  int [,]a = {{1, 2, 3, 4},
              {5, 6, 7, 8},
              {1, 2, 3, 4},
              {5, 6, 7, 8}};
  printPrincipalDiagonal(a, n);
  printSecondaryDiagonal(a, n);
}
}
 
// This code is contributed by rutvik_56

Javascript


输出:
Principal Diagonal: 1, 6, 3, 8, 
Secondary Diagonal: 4, 7, 2, 5,

复杂度分析:

  • 时间复杂度: O(n)。
    因为只涉及一个循环,所以时间复杂度是线性的。
  • 辅助空间: O(1)。
    因为没有额外的空间被占用。