Как напечатать диагонали блока N X N? Проверьте мой код?

#c #c #c 14

#c #c #c 14

Вопрос:

 int main()
{
    int n, i, j;

    cin >> n;

    for (i = 1; i <= n; i  )
    {
        for (j = 1; j <= n; j  )
        {
            if (i == 0 || i   j == n - 1)
            {
                cout << "*";
            }
            else
                cout << " ";
        }

        cout << "n";
    }
    return 0;
}

  

Ожидаемый результат примерно такой (он должен печатать диагональ 5×5, если я введу номер 5)

   *     *
   *  *
    *
  *  *
*      *
  

Комментарии:

1. Код должен иметь отступ, чтобы его можно было прочитать, также должен быть включен фактический вывод, и в вопросе, который задает вопрос, должен быть некоторый текст.

Ответ №1:

Вам не нужно 2 цикла for для рисования шаблона. Достаточно одного цикла.

Просто следите за положением двух звезд.

Нравится:

 #include <stdio.h>

int main(void) {
    int n = 6;
    int starApos = 0;
    int starBpos = n - 1;
    for (int i=0; i < n;   i)
    {
        if (starApos < starBpos)
        {
            printf("%*s", starApos, "");                // spaces before A
            printf("*");                                // A
            printf("%*s", starBpos - starApos - 1, ""); // spaces between A and B
            printf("*");                                // B
        }
        else if (starApos == starBpos)
        {
            printf("%*s", starApos, "");                // special case: only 1 *
            printf("*");
        }
        else
        {
            printf("%*s", starBpos, "");
            printf("*");
            printf("%*s", starApos - starBpos -1, "");
            printf("*");
        }
        printf("n");

          starApos;    // Move positions
        --starBpos;
    }
    return 0;
}
  

Вывод n = 6:

 *    *
 *  *
  **
  **
 *  *
*    *
  

Вывод n = 5:

 *   *
 * *
  *
 * *
*   *
  

Ответ №2:

Чтобы правильно сделать первую диагональ, а i j == n - 1 не ставить i j == n 1 . Наконец, добавьте || j == i , чтобы сделать другую диагональ.

Я также рекомендую вам удалить i == 0 ( i начинается с 1 и только увеличивается, чтобы оно никогда не было 0), добавить в свой код лучший отступ и заменить на #include <bits/stdc .h> , #include <iostream> если вам это действительно не нужно.

Ваша программа должна выглядеть следующим образом:

 #include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i  )
    {

        for(int j = 1; j <= n; j  )
        {
            if (i   j == n   1 || j == i)
                cout << "*";
            else
                cout << " ";
        }
        cout << "n";
    }
    return 0;
}
  

Ответ №3:

Для программы, полностью написанной на C, работает следующий код. Убедитесь, что вы ищете связь между индексами строк и столбцов в каждом * из X (т. Е. Представьте, что X, который вы формируете, является 2D-массивом).

 #include <stdio.h>

int main(void) {
    int size = 0;

    // Ask user to enter size of x, then scan input 
    printf ("Enter size: ");
    scanf("%d", amp;size);
    
    // Only an odd input can be accepted 
    if (size > 0 amp;amp; size % 2 != 0) {

        for (int row = 0; row < size; row  ) {
        
            for (int col = 0; col < size; col  ) {
            
                if (row == col) {
                    //Print one diagonal 
                    printf("*");

                } else if (row   col == size - 1) {
                    //Print the other diagonal 
                    printf("*");

                } else {
                    //Print empty spaces 
                    printf(" ");
                }
            } 
            
            //Move to next row 
            printf ("n");
        }

    }

    return 0;
}