Beste måten å refactor denne C-kode? CS50 - mario.c (mer)

stemmer
-3

Så Im tar CS50 kurset og løse mario.c mer fra PSet 1

Jeg faktisk løste det med tre for looper, men jeg ønsket å refactor det med bare to sløyfer og jeg kom opp med denne koden som gir følgende løsning for height: 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 gjerne vite om dere kan vise meg en mer elegant løsning siden jeg tror dette er altfor ... repeterende.

Dessuten er det mulig å bruke bryteren tilfelle og ikke så mange andre hvis? Prøvde å gjøre det, men koden tok ikke booleans for j :(

Takk på forhånd! :)

Publisert på 02/09/2018 klokken 05:38
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Hvis du kjenner en øvre grense for høyden, kan du gjøre det i en enkelt sløyfe.

Som:

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;
}

Merk: Hvis du ikke vet en øvre grense for høyden, kan du fortsatt bruke denne tilnærmingen, men da små være dynamisk tildelt.

Svarte 02/09/2018 kl. 06:23
kilden bruker

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