Печать повторяющихся ромбовидных фигур с произвольными строками, столбцами и длиной - PullRequest
2 голосов
/ 18 октября 2019

Я новичок в C, и я пытаюсь напечатать формы ромбов в соответствии со строками (2 ~ 10), столбцами (2 ~ 10) и длиной (3, 5, 7, 9) входного алмаза изпользователь.

Используя приведенный ниже код, я могу правильно напечатать алмаз и количество алмазов, но просто не могу определить правильное расстояние между ними.

void printDiamondWith(int diamondlength, int numberOfDiamonds) {

    int i, j, k;
    int star, space;

    star = 1;
    space = diamondlength;

    for (i = 1; i < diamondlength * 2 - 1; i++) {
        for (k = 0; k < numberOfDiamonds; k++) {
            for (j = 0; j < space; j++) {
                printf(" "); // Print the distance for the previous star
            }
            for (j = 1; j < star * 2; j++) {
                printf("*");
            }
            for (j = 0; j < space; j++) {
                printf(" "); // Print the distance for the next star
            }
        }
        printf("\n");

        // Check if length is equal 3, else length -1 to get the correct rows of second half of the diamond
        if (diamondlength == 3) {
            // Loops until the first half of the diamond is finished, then reverse the process to print the second half
            if(i < (diamondlength - diamondlength / 3)) {
                space--;
                star++;
            } else {
                space++;
                star--;
            }
        } else if (diamondlength >= 3) {
            if (i < (diamondlength - 1 - diamondlength / 3)) {
                space--;
                star++;
            } else {
                space++;
                star--;
            }
        }
    }
}

Фактический результат выполнения:

actual result

Ожидаемый результат:

Expected result

1 Ответ

2 голосов
/ 18 октября 2019

Ваши формулы для расчета пространства отключены. Это работает для меня, когда я изменяю это

space = diamondlength;

на это

space = diamondlength/2+1;

И это

for (k = 0; k < numberOfDiamonds; k++) {
    for (j = 0; j < space; j++) {

на это:

for (k = 0; k < numberOfDiamonds; k++) {
    for (j = 0; j < space-1; j++) {

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...