Construya una array sin elementos que excedan X y la suma de dos elementos adyacentes que no excedan Y

Dados cuatro números enteros N , M , X e Y , la tarea es construir una array N * M tal que cada celda consista en un valor en el rango [0, X] tal que la suma de dos celdas adyacentes cualesquiera sea menor que o igual a Y y la suma total de la array debe ser máxima.

Ejemplo: 

Entrada: N = 3, M = 3, X = 5, Y = 3 
Salida: 
3 0 3 
0 3 0 
3 0 3 
Explicación: 
Todos los valores de la array están entre 0 y 5. 
La suma de dos celdas adyacentes es igual a 3. 
La suma total de la array es 15, que es el máximo posible. 

Entrada: N = 3, M = 3, X = 3, Y = 5 
Salida: 
3 2 3 
2 3 2 
3 2 3 
 

Enfoque: 
siga los pasos a continuación para resolver el problema: 

  • Para satisfacer las dos condiciones necesarias, la array debe llenarse alternativamente con solo los dos números siguientes: 

 Primer número = mínimo (X, Y) 
Segundo número = mínimo (2X, Y) –
Ilustración del primer número: 
N = 3, M = 3, X = 5, Y = 3 
Primer número = Mínimo (X, Y) = Mínimo ( 5, 3) = 3 
Segundo número = Mínimo (2X, Y) – 3 = Mínimo (10, 3) – 3 = 3 – 3 = 0 
Por lo tanto, la suma de dos celdas adyacentes = 3 + 0 = 3 (= Y) 

  • Finalmente, imprima los dos números alternativamente, el primer número seguido del segundo número para maximizar la suma de la array.

A continuación se muestra la implementación del enfoque anterior. 

C++

// C++ implementation of
// the above approach
#include <iostream>
using namespace std;
 
// Function to print the
// required matrix
void FindMatrix(int n, int m,
                int x, int y)
{
    int a, b, i, j;
 
    // For 1*1 matrix
    if (n * m == 1) {
        if (x > y) {
            cout << y << "\n";
        }
        else {
            cout << x << "\n";
        }
        return;
    }
 
    // Greater number
    a = min(x, y);
 
    // Smaller number
    b = min(2 * x, y) - a;
 
    // Sets/Resets for alternate
    // filling of the matrix
    bool flag = true;
 
    // Print the matrix
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            if (flag)
                cout << a << ' ';
            else
                cout << b << ' ';
            flag = !flag;
        }
 
        // If end of row is reached
        if (((n % 2 != 0 && m % 2 == 0)
             || (n % 2 == 0 && m % 2 == 0)))
            flag = !flag;
        cout << "\n";
    }
}
 
// Driver Code
int main()
{
 
    int N, M, X, Y;
    N = 3;
    M = 3;
    X = 5;
    Y = 3;
    FindMatrix(N, M, X, Y);
}

Java

// Java implementation of
// the above approach
class GFG{
 
// Function to print the
// required matrix
static void FindMatrix(int n, int m,
                       int x, int y)
{
    int a, b, i, j;
 
    // For 1*1 matrix
    if (n * m == 1)
    {
        if (x > y)
        {
            System.out.print(y + "\n");
        }
        else
        {
            System.out.print(x + "\n");
        }
        return;
    }
 
    // Greater number
    a = Math.min(x, y);
 
    // Smaller number
    b = Math.min(2 * x, y) - a;
 
    // Sets/Resets for alternate
    // filling of the matrix
    boolean flag = true;
 
    // Print the matrix
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (flag)
                System.out.print(a + " ");
            else
                System.out.print(b + " ");
            flag = !flag;
        }
 
        // If end of row is reached
        if (((n % 2 != 0 && m % 2 == 0) ||
             (n % 2 == 0 && m % 2 == 0)))
            flag = !flag;
        System.out.print("\n");
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int N, M, X, Y;
    N = 3;
    M = 3;
    X = 5;
    Y = 3;
    FindMatrix(N, M, X, Y);
}
}
 
// This code is contributed by gauravrajput1

Python3

# Python3 implementation of
# the above approach
 
# Function to print the
# required matrix
def FindMatrix(n, m, x, y):
 
    # For 1*1 matrix
    if (n * m == 1):
        if (x > y):
            print(y)
        else:
            print(x)
             
        return
 
    # Greater number
    a = min(x, y)
 
    # Smaller number
    b = min(2 * x, y) - a
 
    # Sets/Resets for alternate
    # filling of the matrix
    flag = True
 
    # Print the matrix
    for i in range(n):
        for j in range(m):
             
            if (flag):
                print(a, end = " ")
            else:
                print(b, end = " ")
                 
            flag = not flag
 
        # If end of row is reached
        if (((n % 2 != 0 and m % 2 == 0) or
             (n % 2 == 0 and m % 2 == 0))):
            flag = not flag
             
        print ()
 
# Driver Code
N = 3
M = 3
X = 5
Y = 3
 
FindMatrix(N, M, X, Y)
 
# This code is contributed by chitranayal

C#

// C# implementation of
// the above approach
using System;
class GFG{
 
// Function to print the
// required matrix
static void FindMatrix(int n, int m,
                       int x, int y)
{
    int a, b, i, j;
 
    // For 1*1 matrix
    if (n * m == 1)
    {
        if (x > y)
        {
            Console.Write(y + "\n");
        }
        else
        {
            Console.Write(x + "\n");
        }
        return;
    }
 
    // Greater number
    a = Math.Min(x, y);
 
    // Smaller number
    b = Math.Min(2 * x, y) - a;
 
    // Sets/Resets for alternate
    // filling of the matrix
    bool flag = true;
 
    // Print the matrix
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (flag)
                Console.Write(a + " ");
            else
                Console.Write(b + " ");
            flag = !flag;
        }
 
        // If end of row is reached
        if (((n % 2 != 0 && m % 2 == 0) ||
             (n % 2 == 0 && m % 2 == 0)))
            flag = !flag;
        Console.Write("\n");
    }
}
 
// Driver Code
public static void Main(String[] args)
{
    int N, M, X, Y;
    N = 3;
    M = 3;
    X = 5;
    Y = 3;
    FindMatrix(N, M, X, Y);
}
}
 
// This code is contributed by Amit Katiyar

Javascript

<script>
 
// Javascript implementation of
// the above approach
 
// Function to print the
// required matrix
function FindMatrix(n, m, x, y)
{
    var a, b, i, j;
 
    // For 1*1 matrix
    if (n * m == 1)
    {
        if (x > y)
        {
            document.write(y);
        }
        else
        {
            document.write(x);
        }
        return;
    }
 
    // Greater number
    a = Math.min(x, y);
 
    // Smaller number
    b = Math.min(2 * x, y) - a;
 
    // Sets/Resets for alternate
    // filling of the matrix
    var flag = true;
 
    // Print the matrix
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (flag)
                document.write(a + " ");
            else
                document.write(b + " ");
                 
            flag = !flag;
        }
 
        // If end of row is reached
        if (((n % 2 != 0 && m % 2 == 0) ||
             (n % 2 == 0 && m % 2 == 0)))
            flag = !flag;
             
        document.write("<br>");
    }
}
     
// Driver Code
var N, M, X, Y;
N = 3;
M = 3;
X = 5;
Y = 3;
 
FindMatrix(N, M, X, Y);
 
// This code is contributed by Khushboogoyal499
 
</script>
Producción: 

3 0 3 
0 3 0 
3 0 3

 

Complejidad temporal: O(N * M) 
Complejidad espacial: O(1)
 

Publicación traducida automáticamente

Artículo escrito por deepanshujindal634 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *