Как напечатать этот узор? кто-нибудь может объяснить логику?

#c #logic

Вопрос:

Star pattern

Кто-нибудь может сделать логику для этого шаблона? Я также попытался использовать 2 для циклов. У меня только что было интервью, где меня попросили создать звездный узор, как показано на рисунке.

 #include <stdio.h>
int main()
{
   char f;
    int n;
    printf("Enter the number:");
    scanf("%d", amp;n);
    int i, j, s, k, l, m;
    for (s = 1; s <= n; s  ) //printing
    {
        for (k = 1; k <= n; k  )
        {
            for (i = 1; i <= n; i  ) //pattern
            {
                for (j = 1; j <= n; j  )
                {
                    if ((i   j == n   1)) //star positions
                    {
                        printf("* ");
                    }
                    else
                    {
                        printf(" ");
                    }                
                }
                printf("n");   //next line
            }            
        }        
    }
    return 0;
}
 

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

1. Я предполагаю, что это будет как-то связано с printf("* "); печатью вдвое большего количества символов printf(" "); . Что произойдет, если вы измените его на printf("*"); (без дополнительного места)? Кроме того, printf("n"); похоже, что он находится в неправильном месте (должно быть только n^2 строк, а не n^3 строк).

2.Попробуйте if ((k j) % n == 1) { printf("*"); } else { printf(" "); } переместить printf("n"); после i цикла.

Ответ №1:

Вы можете использовать printf() для заполнения строки требуемым количеством пробелов при печати символа звездочки ( * ). Таким образом, вам не нужно беспокоиться о том, чтобы расставить его самостоятельно:

 #include <stdio.h>
#include <string.h>

int main(void) {
    int n;
    printf("Enter the number: ");
    scanf("%d", amp;n);

    for (int i = 1; i <= n; i  ) {
        char pat[n   1];
        memset(pat, 0, sizeof pat);
        pat[0] = '*';

        for (int j = 1; j <= n; j  ) {
            for (int k = 1; k <= n; k  )
                printf("%*s", n, pat);
            printf("n");
            pat[j] = ' ';
        }
    }
}
 

Ответ №2:

Код C для печати этого шаблона с использованием двух циклов будет

 #include<stdio.h>
int main()
{
    int n;
    printf("Enter pattern length :");
    scanf("%d",amp;n);
    int matrix=n*n;
    for(int i=1;i<=matrix;i  )
    {

        for(int j=1;j<=matrix;j  )
        {
           if((i j-1)%n==0)
           {
               printf("*");
           }
           else
           {
              printf(" ");
           }
        }
        printf("n");
    }
}
 

Ответ №3:

Зачем делать две петли, когда можно сделать одну? Если вы понаблюдаете за последовательностью напечатанных символов, включая новые строки, вы можете увидеть, что последний символ, напечатанный в каждой n*n 1 последовательности, является новой строкой, а последний символ в каждой n последовательности -«*». Остальное-пустые места.

 #include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv)
{
  if (argc != 2)
    {
      fprintf(stderr, "usage: star_pattern numn");
      exit(EXIT_FAILURE);
    }

  int n = atoi(argv[1]);
  int dim = n*n;

  for (int i = 0; i < (dim 1)*dim; i  )
  {
    if (i%(dim 1) == dim)
      fputc('n', stdout);
    else if (i % n == n-1)
      fputc('*', stdout);
    else
      fputc(' ', stdout);
  }
}
 

Ответ №4:

Эту проблему можно решить, используя 2 для цикла.

 #include<stdio.h>
    int main()
    {
        int num;
        printf("Enter pattern length :");
        scanf("%d",amp;num);
        
        int matrix=num*num;
        for(int i=0;i<matrix;i  )
        {
    
            for(int j=0;j<matrix;j  )
            {
               if((i j 1)%num==0)
               {
                   printf("*");
               }
               else
               {
                  printf(" ");
               }
            }
            printf("n");
        }
    }
 

Ответ №5:

Решение Java 1:

 private static void stars(int n) {
    for (var i = 0; i < n; i  ) {
        for (var j = 0; j < n; j  ) {
            var p = " ".repeat(n-j-1)   '*'   " ".repeat(j);
            System.out.println(p.repeat(n));
        }
    }
}
 

или немного оптимизирован (?)

 private static void stars(int n) {
    var p = (" ".repeat(n-1)   '*').repeat(n 1);
    var l = n*n;
    for (var i = 0; i < l; i  ) {
        System.out.println(p.substring(i%n, l i%n));
    }
}
 

Вывод для n = 2 :

  * *
* * 
 * *
* * 
 

и n = 3 :

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

1 — вопрос был помечен Java