i've also tried many inputs from forum responses and all have been correct.
anybody see what's missing?
Code: Select all
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int niveles=0;
void buscar_triangulo_abajo(char **m, int fila, int columna)
{
int j,cont=0;
if (m[fila][columna]=='-')
{
for (j=0-niveles;j<=niveles;j++)
{
if (m[fila][columna+j]=='-') cont++;
}
if (cont==(2*niveles+1))
{
niveles++;
buscar_triangulo_abajo(m,fila+1,columna);
}
}
}
void buscar_triangulo_arriba(char **m, int fila, int columna)
{
int j,cont=0;
if (m[fila][columna]=='-')
{
for (j=0-niveles;j<=niveles;j++)
{
if (m[fila][columna+j]=='-') cont++;
}
if (cont==(2*niveles+1))
{
niveles++;
buscar_triangulo_arriba(m,fila-1,columna);
}
}
}
int mayordelos2(int a, int b)
{
if (a>b) return a;
else return b;
}
int main()
{
char **m;
int n,i,j,area1=0,area2=0,area,contador=0;
while (scanf("%i\n",&n)==1)
{
area1=0;area2=0;
if (n==0)
{
break;
}
else
{
m = malloc((n+2) * sizeof(char *));
for (i=0;i<(n+2);i++)
{
m[i]=malloc((2*n-1) * sizeof(char));
if (i>0 && i<(n+1)) gets(m[i]);
else for (j=0;j<(2*n-1);j++) m[i][j]='#';
}
for (i=1;i<(n+1);i++)
{
for(j=i;j<(2*n-1-i);j=j+2)
{
niveles=0;
buscar_triangulo_abajo(m,i,j);
if (niveles>area1) area1=niveles;
}
}
for (i=n;i>0;i--)
{
for(j=(i-1);j<(2*n-i);j=j+2)
{
niveles=0;
buscar_triangulo_arriba(m,i,j);
if (niveles>area2) area2=niveles;
}
}
for (i=0; i<(n+2); i++)
free (m[i]);
free (m);
m=NULL;
contador++;
if(contador>1)
{
printf("\n");
}
area=mayordelos2(area1,area2);
printf("Triangle #%i\n",contador);
printf("The largest triangle area is %i.\n",area*area);
}
}
return 0;
}