numero aleatorios en matriz 3*3 sin repetir

Iniciado por creiko, 18 Mayo 2016, 09:27 AM

0 Miembros y 1 Visitante están viendo este tema.

creiko

Código (cpp) [Seleccionar]
Dev c++

Hola la cosa es la siguiente
debo hacer el cubo magico de 3*3 usando numero aleatorios, sin que se repitan
del 1 A 9
Tengo este codigo
pero tengo problemas que solo me coje los mismo números
no me los rota
Mis numero
8 1 6
3 5 7
4 9 2
He visto otro orden
2 9 4
7 5 3
6 1 8

Como hago para que me den esos números en diferentes posiciones y suman 15
en filas , columnas y diagonales

#include <stdio.h>
#include"stdlib.h"
#include"conio.h"
#include"time.h"
#include"iostream"

int main()
{
   
    int a[3][3];
    int contador=0;
    int i;
    int j;
    int vi=0;
    int vj=0;
    int limite=3*3;
    int limitei=3-1;
    int limitej=3-1;
    int sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,sum6=0,sum7=0,sum8=0;
    srand(time(NULL));
    for( i=0;i<3;i++)
    {
       for( j=0;j<3;j++ )
         {
          a[i][j]=1+rand()%(9);
          a[i][j]=0;
        }
    }
    i = 3/ 2;
    j = 0;
   
    for(contador=1;contador<=limite;contador++)
    {
       
        a[j][i] = contador;
       
        vi = i;
        vj = j;
       
        i++;
        if(  i> limitei ) i = 0;
       
        j--;
        if( j < 0 ) j= limitej;
       
        if (a[j][i]>0)
        {
           
            i = vi;
           j = vj +1 ;
        }
    }
   
    printf("\n MATRIZ 3X3 \n");
    for( i=0 ; i<3 ; i++)
    {
         for( j=0 ; j<3 ; j++ )
         {
              printf("  %d ",a[i][j]);
         }
printf("  \n");
    }
   
   
    for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
if(i==0)
{
sum1=sum1+a[i][j];
}
if(i==1)
{
sum2=sum2+a[i][j];
}
if(i==2)
{
sum3=sum3+a[i][j];
}
if(j==0)
{
sum4=sum4+a[i][j];
}
if(j==1)
{
sum5=sum5+a[i][j];
}
if(j==2)
{
sum6=sum6+a[i][j];
}
}
}

for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
if(i==j)
sum7=sum7+a[i][j]; 
if(i==2-j)
sum8=sum8+a[i][j]; 

}
}


printf("\n\n");

printf("SUMA DE LAS FILAS \n\n");

printf("%d",sum1);
printf("\n\n");
printf("%d",sum2);
printf("\n\n");
printf("%d",sum3);

printf("\n\n");
printf("*********************************************** \n");
printf("\n\n");

printf("SUMA DE LAS COLUMNAS \n\n");

printf("%d",sum4);
printf("\n\n");
printf("%d",sum5);
printf("\n\n");
printf("%d",sum6);

printf("\n\n");
printf("*********************************************** \n");
printf("\n\n");

printf("SUMA DE LAS DIAGONALES \n\n");

printf("%d",sum7);
printf("\n\n");
printf("%d",sum8);
printf("\n\n");
}



FurioMoltisanti

Encuentro tu código bastante confuso, creo que deberías empezar de cero. Intenta plantear el problema paso a paso.

Mi forma seria:

Debemos llenar una matriz con números aleatorios comprobando que cada numero que insertamos no exista previamente en ella.
A continuación comprobamos si la suma de toda columna/fila/diagonal da 15, si es así mostramos por pantalla la matriz si no volvemos a llenar la matriz hasta que se de el caso.

Te pongo como he empezado yo(en este ejemplo he usado he empleado un vector en lugar de una matriz):

   do{
     //ponemos la matriz a cero
         //bucle con el que llenamos de números aleatorios la matriz
         //dentro del bucle cada vez que generamos un numero
         //comprobamos si ya existe para que no se repitan
}while(empleados[0]+empleados[1]+empleados[2] != 15 ||
empleados[3]+empleados[4]+empleados[5] != 15 ||
empleados[6]+empleados[7]+empleados[8] != 15 ||
empleados[0]+empleados[3]+empleados[6] != 15 ||
empleados[1]+empleados[4]+empleados[7] != 15 ||
empleados[2]+empleados[5]+empleados[8] != 15 ||
empleados[0]+empleados[4]+empleados[8] != 15 ||
empleados[6]+empleados[4]+empleados[2] != 15);