📜  创建每个子矩阵中对角线总和为偶数的矩阵

📅  最后修改于: 2021-05-04 12:53:41             🧑  作者: Mango

给定一个数字N ,任务是创建一个大小为N * N的方阵,其值在[1,N * N]范围内,以使偶数子方阵的每个对角线之和为偶数。

例子:

方法:想法是按照以下给出的方式排列从1到N * N的元素:

  1. 分别用1和2个元素初始化奇数和偶数。
  2. 迭代[0,N]范围内的两个嵌套循环。
  3. 如果两个嵌套循环指标的总和是偶数的打印奇数和增量奇数2并且如果该总和是奇数然后打印的偶数的值,增量甚至2的值。

下面是上述方法的实现:

C++
// C++ program for the above approach
#include 
using namespace std;
  
// Function to print N*N order matrix
// with all sub-matrix of even order
// is sum of its diagonal also even
void evenSubMatrix(int N)
{
    // Even index
    int even = 1;
  
    // Odd index
    int odd = 2;
  
    // Iterate two nested loop
    for (int i = 0; i < N; i++) {
  
        for (int j = 0; j < N; j++) {
  
            // For even index the element
            // should be consecutive odd
            if ((i + j) % 2 == 0) {
                cout << even << " ";
                even += 2;
            }
  
            // for odd index the element
            // should be consecutive even
            else {
                cout << odd << " ";
                odd += 2;
            }
        }
        cout << "\n";
    }
}
  
// Driver Code
int main()
{
    // Given order of matrix
    int N = 4;
  
    // Function call
    evenSubMatrix(N);
    return 0;
}


Java
// Java program for the above approach
import java.util.*;
  
class GFG{
  
// Function to print N*N order matrix
// with all sub-matrix of even order
// is sum of its diagonal also even
static void evenSubMatrix(int N)
{
      
    // Even index
    int even = 1;
  
    // Odd index
    int odd = 2;
  
    // Iterate two nested loop
    for(int i = 0; i < N; i++) 
    {
        for(int j = 0; j < N; j++) 
        {
              
            // For even index the element
            // should be consecutive odd
            if ((i + j) % 2 == 0)
            {
                System.out.print(even + " ");
                even += 2;
            }
              
            // For odd index the element
            // should be consecutive even
            else 
            {
                System.out.print(odd + " ");
                odd += 2;
            }
        }
        System.out.println();
    }
}
  
// Driver code
public static void main(String[] args)
{
      
    // Given order of matrix
    int N = 4;
      
    // Function call
    evenSubMatrix(N);
}
}
  
// This code is contributed by offbeat


Python3
# Python3 program for the above approach
  
# Function to prN*N order matrix
# with all sub-matrix of even order
# is sum of its diagonal also even
def evenSubMatrix(N):
      
    # Even index
    even = 1
  
    # Odd index
    odd = 2
  
    # Iterate two nested loop
    for i in range(N):
        for j in range(N):
  
            # For even index the element
            # should be consecutive odd
            if ((i + j) % 2 == 0):
                print(even, end = " ")
                even += 2
              
            # For odd index the element
            # should be consecutive even
            else:
                print(odd, end = " ")
                odd += 2
                  
        print() 
  
# Driver Code
  
# Given order of matrix
N = 4
  
# Function call
evenSubMatrix(N)
  
# This code is contributed by sanjoy_62


C#
// C# program for the above approach
using System;
  
class GFG{
  
// Function to print N*N order matrix
// with all sub-matrix of even order
// is sum of its diagonal also even
static void evenSubMatrix(int N)
{
      
    // Even index
    int even = 1;
  
    // Odd index
    int odd = 2;
  
    // Iterate two nested loop
    for(int i = 0; i < N; i++) 
    {
        for(int j = 0; j < N; j++) 
        {
              
            // For even index the element
            // should be consecutive odd
            if ((i + j) % 2 == 0)
            {
                Console.Write(even + " ");
                even += 2;
            }
              
            // For odd index the element
            // should be consecutive even
            else
            {
                Console.Write(odd + " ");
                odd += 2;
            }
        }
        Console.WriteLine();
    }
}
  
// Driver code
public static void Main(String[] args)
{
      
    // Given order of matrix
    int N = 4;
      
    // Function call
    evenSubMatrix(N);
}
}
  
// This code is contributed by amal kumar choubey


输出:
1 2 3 4 
6 5 8 7 
9 10 11 12 
14 13 16 15

时间复杂度: O(N * N)
辅助空间: O(1)