Making a Hash Pyramid

后端 未结 2 1319
长情又很酷
长情又很酷 2020-12-06 03:37

Currently doing the CS-50 course and was wondering if anyone could help me with this. I\'m supposed to create a program which will ask a user for a height between 1-23 (and

相关标签:
2条回答
  • 2020-12-06 04:25

    Here is a version that may offer some insight:

    #include <stdio.h>
    #include <cs50.h>
    
    int main(void) {
        //initialize variables
        int height, n, j, k, i;
    
        printf("Height: \n");
        // Get user input
        height = GetInt();
        n = height;
        for(i = 0; i < height; i++) {
            // create n spaces based off height
            for(k = n; k > i; k--)
                printf("%c", ' ');      
    
            // create hash tags
            for(j = 0; j < i+2; j++)
                printf("#");
    
            printf("\n");
        }
        return 0;
    }
    

    Result if user entered a height of 5:

    Height: 
         ##
        ###
       ####
      #####
     ######
    
    • The 1st for loop essentially prints the number of rows matching the height entered

    • The 2nd for loop involves printing the number of spaces based on the height entered

    • The 3rd for loop involves printing the number of hashes (with respect to the height value) after the amount of spaces on the same line

    Cheers

    0 讨论(0)
  • 2020-12-06 04:37

    Here is a way you can implement this. Basically, you need to build the pyramid from the bottom up. The task is easy once you see the loop structure, its just tricky to get the math down for printing the correct number of spaces and hash symbols:

    #include <stdio.h>
    
    int main(void)
    { 
        int height, i, j;
        do
        {
            printf("please give me a height between 1-23: ");
            height = GetInt();
        }    
        while (height < 1 || height > 23);
    
        printf("\n");    
        for (i = 0; i < height; i++) {
    
            for (j = 0; j < height - i - 1; j++)
                printf(" ");
            for (j = 0; j < i + 2; j++)
                printf("#");
    
            printf("\n");
        }
    }
    

    For more clarification on whats going on, and why each loop is necessary:

    1. Outer for loop: the variable i corresponds to a row in the pyramid. the value of i will remain constant for each of the second two loops

    2. First inner for loop: for any row, there needs to be height - i - 2 spaces. You can figure this out because the total row width will be height, and any row has i + 2 hash symbols, so there needs to be height - (i + 2) = height - i - 1 spaces. So basically, this loop just prints the required spaces. You can track this with the variable j

    3. Second inner for loop: This loop is similar to the first inner loop, but you need to now print the hash marks. At the beginning of the loop you reset j and count up to the required number of hash marks

    0 讨论(0)
提交回复
热议问题