#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
int **array;
char espacios[10]={'\0'};
int n=1,c,i,r,ret,divisor=1,contador=0, nDimensiones;
printf("Introduce el valor inicial para N: ");
scanf("%d",&n);
printf("Introduce el numero de dimensiones: ");
scanf("%d",&nDimensiones);
printf("\n");
array = (int**)calloc(nDimensiones,sizeof(int));
for(i=0;i<nDimensiones;i++)
array[i] = (int*)calloc(nDimensiones,sizeof(int));
//Relleno el array bidimensional
for (c=nDimensiones/2,r=0;c >=0;c--,r++){
for (i=0;i<(nDimensiones/2 + nDimensiones%2);i++){
array[r+i][c+i]=n;
n++;
}
}
//Obtengo una cadena con la cantidad de espacios necesarias para cuadrar bien los numeros
//Tambien obtengo un contador que me indica cuantos espacios se han metido y lo uso para
//indicarle a printf cuantos caracteres como minimo tiene que tener cada numero y si tiene
//menos los alinea a la derecha llenando el resto con espacios
do{
ret=array[nDimensiones-1][nDimensiones/2+nDimensiones%2-1] / divisor;
divisor *=10;
contador++;
strcat(espacios," ");
}while(ret > 0);
//Muestro el rombo
for (r=0;r <nDimensiones;r++){
for (c=0;c <nDimensiones;c++){
if (array [r][c] !='\0')
printf ("%*d",contador,array [r][c]);
else
printf ("%s",espacios);
}
printf("\n");
}
for(i=0;i<nDimensiones;i++)
free(array[i]);
free(array);
fflush(stdin);
getchar();
return 0;
}