Что является математикой для циклов For в этой задаче CS50 Установите с C - PullRequest
0 голосов
/ 05 января 2019

В настоящее время я прохожу через CS50 через edx и выполняю набор задач 1. Марио.

Цель состоит в том, чтобы создать распечатку с использованием знаков фунта. С помощью нескольких видео я получил код для первого, но я не понимаю, как работает математика / что понимает компьютер.

Так что я думаю, что если я не узнаю, я калечу себя позже.

if n= 5

Тогда я добавляю 1, пока он не станет меньше 5, что означает 5 раз да?

Посмотрите на эту строку для пробела>
for (int j = 0; j < n -1 - i; j++)

Если n равно 5, то в конечном итоге оно становится j (0) <3 ... </p>

Так почему в первой строке четыре пробела, а не три пробела?

#include <cs50.h>
#include <stdio.h>
int main(void)
{
    int n;
    do
    {
        n = get_int("Pyramid Height: ");
    }
    while (n < 0 || n >= 24);

    //print out this many rows
    for (int i = 0; i < n; i++)
    {


        for (int j = 0; j < n -1 - i; j++)
    {
       printf(" ");
    }
    // print out this many columns
        for (int j = 0; j < i + 2; j++)
        {
            printf("#");
        }
        printf("\n");
    }

}

Я получил правильную пирамиду, но я не понимаю логику пробелов и отпечатков

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Это выглядит слишком сложно.

Вот простая версия, которую я взбил:

#include <stdio.h>

int main(void) {
    int height = 5;
    char blocks[height];
    memset(blocks,'#',height);

    for(int i=0; i<height; ++i)
    {
        printf("%*.*s\n", height, i+1, blocks );
    }
    return 0;
}

Выход:

Success #stdin #stdout 0s 9424KB
    #
   ##
  ###
 ####
#####
0 голосов
/ 09 февраля 2019

Давайте попробуем выяснить схему здесь. Как и для левой пирамиды, если высота пирамиды равна 8, проверьте рисунок пробелов и хешей сверху вниз. В этом случае нам нужно 8 строк, каждая строка имеет одинаковые символы, количество пробелов не уменьшается, а количество хешей не увеличивается сверху вниз.

Теперь у нас есть образец для левой половины, правая половина такая же, зеркальное отображение. Итак, теперь мы можем записать цикл, поскольку знаем число пробелов и хешей сверху вниз. В программировании мы должны понимать основной принцип. Подключить код впоследствии становится легко.

#include <cs50.h>
#include <stdio.h>

int main(void)
{
int h;
do
{
    h = get_int("Pyramid height: ");
}
while (h<1 || h>8);

int n = 8, i, j;

for (i=0; i<h;++i)
{
    // left half
    for (j=0;j<h-1-i;++j)

        printf(" ");

    for (j=0;j<i+1;++j)

        printf("#");

   // two spaces in middle
    printf("  ");

    // right half, we have omitted the space code as it is not required.   
    for (j=0;j<i+1;++j)

        printf("#");

    printf("\n");  
}

return 0;
0 голосов
/ 05 января 2019

если n = 5, то n-1-j будет равен 5-1-0, то есть 4 в первый раз, когда выполняется цикл, поэтому вы видите четыре пробела. Условие первого цикла должно быть n-2-j, если вы хотите, чтобы количество пробелов равнялось трем, потому что общее количество столбцов не равно 5, а ожидаемые в первой строке фунты равны 2, поэтому вы должны вычесть 2 из n.

...