elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Ayuda con este ejercicio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con este ejercicio  (Leído 5,082 veces)
:ohk<any>


Desconectado Desconectado

Mensajes: 1.744


Yo lo que quiero que me salga bien es la vida.


Ver Perfil WWW
Ayuda con este ejercicio
« en: 27 Agosto 2008, 06:37 am »

Hola foro, me he topado con este ejercicio y no lo puedo resolver aún, a ver si uno de ustedes me puede echar una mano.

Bueno aquí la descripción.

Realizar de forma recursiva la siguiente matriz denominada ( cubo mágico ).

        8   1   6
        3   5   7
        4   9   2

El cubo mágico es una matriz impar (obligatorio) la cual proporciona un mismo resultado si sumas las filas o las columnas.

      8 + 1 + 6  =  15
      3 + 5 + 7  =  15
      4 + 9 + 2  =  15


      8 + 3 + 4  = 15

Bueno, creo que el punto esta claro hasta ahí.

Ahora bien, hay reglas de llenado de matriz, pues primero siempre debe llenarse la matriz por la fila 0 y en el medio.

Como hacemos esto?
 n = tamaño de la matriz, por decir 5
n/2

        8   1   6
        3   5   7
        4   9   2

en nuestro ejemplo, el 1 se debe llenar 1ro.
Ahora bien, como es que llenamos todo lo demás.
Pues utilizamos el salto del caballo y las siguientes restricciones:

1ro.
                1

2do.
Haciendo salto:

De donde nos encontrábamos, nos movemos uno a la derecha y uno hacia arriba.

                         |
                   1  --

Pero que pasa, resulta que nos hemos salido de la matriz por encima de la matriz, entonces debemos utilizar la siguiente condicionante.

Si el numero a introducir cae fuera de la matriz se debe mover 1no a la derecha e ir a la parte de abajo de la matriz, como si fuera un pedazo de papel a la que hemos unido por ambos lados en forma de un cilindro.

        -   1   -
        -   -   -
        -   -   2

Ahora bien, si continuamos con la regla, avanzamos 1no a la derecha y uno hacia arriba, pero al avanzar a la derecha ya estamos fuera de la matriz, fuera de la columnas, entonces hacemos lo siguiente.

En ves de ir uno mas hacia la derecha, nos vamos hacia el principio y subimos de fila (o bajamos, dependiendo de como lo vean) y colocamos el numero donde debe ser.

        -   1    -
        3   -   -
        -   -   2

Ahora bien, siguiendo con el procedimiento nos movemos 1no a la derecha y 1no hacia arriba, pero que pasa, ahora resulta que la matriz en la posición que nos toca ocupar ya tiene un valor, entonces hacemos el siguiente procedimiento.

        -   1   -
        3   -   -
        4   -   2

Colocamos el siguiente número por debajo del número anterior, como se ve en el ejemplo.

Luego continuamos con los pasos y no encontramos ningún problema en el siguiente número, 1no a la derecha y 1no hacia arriba.

        -   1   -
        3   5   -
        4   -   2


He incluso no encontramos problemas hasta en el siguiente número. 1no derecha y 1no arriba.

        -   1   6
        3   5   -
        4   -   2


Continuando con las reglas avanzamos 1no a la derecha (y ya estamos fuera y por lo mismo consiguiente nos vamos al inicio de la columna) y subimos 1no, y ahora nos hemos salido de la fila y por lo mismo consiguiente nos vamos por debajo

        -   1   6
        3   5   -
        4   -   2

Pero como resultado tenemos el lugar ocupado, entonces recurrimos a:

Citar
Colocamos el siguiente número por debajo del número anterior

        -   1   6
        3   5   7
        4   -   2

Y lo hacemos según los procedimientos ya mencionados en los pasos anteriores hasta culminar con la matriz.

Ahora bien, cual es el axioma?

Nos preguntamos, cuando debe terminar de llenar?

Pues cuando haya llegado a 9 (que es el caso de nuestro ejemplo)
Lo cual podemos sacar con el tamaño de la matriz.

n = 5;  // Tamaño de la matriz

  if(contador == n*n)

Bueno, espero que el enunciado este claro.

Buena suerte!

Un saludo

OHK


En línea

Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.
chrominum


Desconectado Desconectado

Mensajes: 567


Viceroy: No es lo que tengo, es COMO lo tengo


Ver Perfil WWW
Re: Ayuda con este ejercicio
« Respuesta #1 en: 28 Agosto 2008, 15:00 pm »

Si es que soy el fucking crack  ::) ;D :xD toma, todo hecho:

Código:
using System;
using System.Collections.Generic;
using System.Text;

namespace CuadradosMagicos
{
    class CuadradosMagicosApp
    {
        static void Main(string[] args)
        {
            int Numero, x, y;
            int[,] Numeros;
            do
            {
            Console.Write("Introduce un numero impar: ");
            Numero = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine();
            } while (Numero % 2 == 0); //Mientras sea par

            Numeros = new int[Numero, Numero];

            Numeros = CMRecursivo(Numeros, Numero, 1, 0, Numero / 2);

            for (x = 0;x < Numero;x++)
            {
                for (y = 0;y < Numero;y++)
                {
                    Console.Write("{0} ", Numeros[x, y]);
                }
                Console.WriteLine();
            }

            Console.ReadKey();
        }

        public static int[,] CMRecursivo(int[,] Numeros, int n, int Actual, int x, int y)
        {
            if (x < 0)
                x += n;
            else if (x > n - 1)
                x %= n;

            if (y < 0)
                y += n;
            else if (y > n - 1)
                y %= n;

            while (Numeros[x, y] != 0)
            {
                x = (x + 2) % n;
                y--;

                if (y < 0)
                    y += n;
            }

            Numeros[x, y] = Actual;
            return (Actual == n * n) ? Numeros : CMRecursivo(Numeros, n, ++Actual, x - 1 , y + 1);
        }
    }
}


« Última modificación: 28 Agosto 2008, 15:02 pm por ArcheritONE » En línea

:ohk<any>


Desconectado Desconectado

Mensajes: 1.744


Yo lo que quiero que me salga bien es la vida.


Ver Perfil WWW
Re: Ayuda con este ejercicio
« Respuesta #2 en: 28 Agosto 2008, 20:54 pm »

jejeje  :¬¬

me falto decir que deben resolverlo en Java :P

pero no hay problema, voy a ver como cuernos lo paso  :xD

Un saludo

OHK
En línea

Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.
:ohk<any>


Desconectado Desconectado

Mensajes: 1.744


Yo lo que quiero que me salga bien es la vida.


Ver Perfil WWW
Re: Ayuda con este ejercicio
« Respuesta #3 en: 2 Septiembre 2008, 06:17 am »

Código
  1.  
  2. public class Magico
  3. {
  4.  
  5.  
  6.    public static void main (String [] args)
  7.    {
  8.        int fil = 0;
  9.        int n = 4;
  10.        int colmedio = n / 2;
  11.        int c = 1;
  12.        int mat [] [] = new int [n] [n];
  13.  
  14.        magico1 (mat, fil, colmedio, c, n);
  15.        mostrar (mat, n);
  16.    }
  17.    static void magico1 (int mat [] [], int fil, int colmedio, int c, int n)
  18.    {
  19.        if (c == n * n)
  20.            mat [n-1] [colmedio] = c;
  21.        else
  22.        {
  23.            if (fil < 0 && colmedio == n)
  24.                magico1 (mat, fil + 2, n - 1, c, n);
  25.            else
  26.            {
  27.                if (fil < 0)
  28.                    magico1 (mat, n - 1, colmedio, c, n);
  29.                else
  30.                {
  31.                    if (colmedio == n)
  32.                        magico1 (mat, fil, 0, c, n);
  33.                    else
  34.                    {
  35.                        if (mat [fil] [colmedio] == 0)
  36.                        {
  37.                            mat [fil] [colmedio] = c;
  38.                            magico1 (mat, fil - 1, colmedio + 1, c + 1, n);
  39.                        }
  40.                        else                            
  41.                            magico1 (mat, fil + 2, colmedio - 1, c, n);
  42.                    }
  43.                }
  44.            }
  45.  
  46.        }
  47.    }
  48.  
  49.  
  50.    static void mostrar (int mat [] [], int n)
  51.    {
  52.        for (int j = 0 ; j < n ; j++)
  53.        {
  54.            System.out.println ();
  55.            for (int i = 0 ; i < n ; i++)
  56.            {
  57.                System.out.print ("\t" + mat [j] [i]);
  58.            }
  59.        }
  60.    }
  61. }
  62.  

 ::) ::)
En línea

Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
porfis quien me ayuda con este ejercicio porque no se como hacerlo
Java
pati-ko1 2 2,152 Último mensaje 15 Junio 2012, 01:25 am
por Nortis
ayuda con este ejercicio please
Programación C/C++
ramoncarri 2 2,090 Último mensaje 1 Mayo 2013, 18:59 pm
por durasno
Ayuda con este ejercicio incompleto,por favor.
Programación C/C++
xboxone007 2 2,318 Último mensaje 17 Diciembre 2013, 22:27 pm
por xboxone007
ayuda con este ejercicio, por favor
Programación C/C++
alexandra.vargas 7 4,348 Último mensaje 9 Enero 2014, 19:05 pm
por alexandra.vargas
Ayuda con este ejercicio de recursion en java.
Java
Phobos16 1 1,773 Último mensaje 30 Agosto 2014, 04:33 am
por gordo23
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines