【问题标题】:How to print this pattern? can anyone explain logic?如何打印这个图案?谁能解释逻辑?
【发布时间】:2021-09-21 16:20:22
【问题描述】:

Star pattern

任何人都可以为这种模式制定逻辑吗? 我也尝试使用 2 for 循环。 我刚刚接受了一次面试,要求我创建如图所示的星形图案。

#include <stdio.h>
int main()
{
   char f;
    int n;
    printf("Enter the number:");
    scanf("%d", &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;
}

【问题讨论】:

  • 我猜这与printf("* "); 打印的字符数是printf(" "); 的两倍有关。如果将其更改为printf("*");(没有多余的空格)会发生什么?此外,printf("\n"); 看起来位置错误(应该只有 n^2 行,而不是 n^3 行)。
  • 尝试if ((k + j) % n == 1) { printf("*"); } else { printf(" "); } 并在i5 循环之后移动@9876543336@。6@5

标签: c logic


【解决方案1】:

在打印星号 (*) 字符时,您可以使用printf() 为您填充所需数量的空格。这样,您就不必担心自己的间距:

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

int main(void) {
    int n;
    printf("Enter the number: ");
    scanf("%d", &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 代码,用于使用两个 for 循环打印此模式

    #include<stdio.h>
    int main()
    {
        int n;
        printf("Enter pattern length :");
        scanf("%d",&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 num\n");
            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个for循环解决。

        #include<stdio.h>
            int main()
            {
                int num;
                printf("Enter pattern length :");
                scanf("%d",&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】:

          Java1解决方案:

          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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-05-25
            • 2017-12-03
            • 2021-10-30
            • 1970-01-01
            • 2022-01-16
            • 1970-01-01
            • 1970-01-01
            • 2022-11-10
            相关资源
            最近更新 更多