La mejor manera de refactorizar el código C? CS50 - mario.c (más)

votos
-3

Así que estoy tomando el curso CS50 y resolver el mario.c más del conjunto de procesadores 1

De hecho, me lo resolvió con 3 bucles, pero quería refactorearlo con sólo 2 bucles y me encontré con este código que le da la siguiente solución para la altura: 5

Result:
    #  #
   ##  ##
  ###  ###
 ####  ####
#####  #####

#include <stdio.h>

int main(void)
{
   
    int side = 5;
    int max = side + 2;

    for (int i = 1 ; i <= side ; i++)
    {
      int j = 1;
      while(j != max+1)
      {
        if(j <= side-i)
        {
        printf( );
        j++;
        }
        else if(j > side-i && j < side+1)
        {
        printf(#);
        j++;
        }
        else if(j == side+1)
        {
        printf(  );
        j++;
        } 
        else 
        {
        printf(#);
        j++;
        }
      }
    max++;
    printf(\n);
    }
}

Id gustaría saber si ustedes me puede mostrar una solución más elegante ya que creo que esto es demasiado ... repetitivo.

Además, es posible utilizar el caso interruptor en lugar de tantos else if? Trató de hacerlo pero el código no tomó booleanos para j :(

¡Gracias por adelantado! :)

Publicado el 02/09/2018 a las 05:38
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Si conoces a un límite superior de la altura, lo puede hacer en un solo bucle.

Me gusta:

int main(void) {
    char s[] = "#############################################";
    char f[32];

    int n = 5;  // height

    sprintf(f, "%%%ds  %%s", n);   // Create a format string like "%5s  %s"
    char* p = s + strlen(s) - 1;   // Let p point to the last char in s

    for(int i=0; i<n; i++)         // Loop n times
    {
        printf(f, p, p);
        printf("\n");
        p--;                       // Increase the number of # that p points to
    }
    return 0;
}

Nota: Si usted no sabe un límite superior para la altura, aún puede utilizar este enfoque, pero a continuación sdebe ser dinámico asignado.

Respondida el 02/09/2018 a las 06:23
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more