【问题标题】:Pyramid pattern algorithm developing金字塔模式算法开发
【发布时间】:2021-05-14 22:23:24
【问题描述】:

我正在做一些hackerrank练习,但我无法解决它。我是新手,有什么想法可以解决这个问题吗?

请编写一个软件程序,将以下金字塔图案打印到屏幕上。你的程序应该得到一个数字“n”作为输入,并且应该打印金字塔的 n 行。 (例如,如果您的输入为 4,则预期会出现以下输出。)

(您可以选择任何您想要的编程语言。)

      1
    2 3 2
  3 4 5 4 3
4 5 6 7 6 5 4


#include<stdio.h>

int main()
{
    int i,j,k,l=1;
    for(i=1; i<=5; i++)
    {
        for(j=4; j>=i; j--)
        {
            printf(" ");
        }
        
        for(k=1; k<=l; k++)
        { 
            printf("%d",k);
        }            
            l = l+2;    
        printf("\n");
    }
    return 0;
}

【问题讨论】:

  • 请分享您的尝试,我们会帮助您纠正它
  • @Krishna Chaurasia 我添加了我到目前为止所做的事情。你能帮我解决上面的预期输出吗?
  • 代码为C 语言,但您已添加python 标签。编辑标签以添加C 可能会为您提供更多帮助。
  • @Krishna Chaurasia 它可以用任何语言完成。我打开它们中的每一个。你能帮忙吗
  • @burakzbc 提示:左右三角形有一个单独的循环。还可以使用一些数学来计算需要打印的数字。

标签: c algorithm


【解决方案1】:

这些类型的问题可以通过简单的数学来解决。

我建议您通过将其分解为更简单和更小的用例来解决这个问题,如下所示:

  1. 每行的空格数。

  2. 直到金字塔中心的元素数量(每行)。

  3. 金字塔中心之后的元素数量(每行)。

     #include<stdio.h>
    
     int main()
     {
         int N;
         scanf("%d", &N);
    
         int numberOfBlankSpaces = N + 2;
    
         for(int i=1; i<=N ;i++){    
    
             for(int j=0;j<numberOfBlankSpaces;j++){
                 printf(" ");
             }
    
             numberOfBlankSpaces -= 2;
    
             int number_of_elements_until_centre_on_each_line = i;
             int startingElement = i;
    
             //Print increasing order until center
             while(number_of_elements_until_centre_on_each_line--){
                 printf("%d ", startingElement);
                 startingElement++;
             }
    
             // Starting element = Element at center - 1 
             startingElement-=2;
    
             //Print decresing order
             while(startingElement >= i){
                 printf("%d ", startingElement);
                 startingElement--;
             }
    
             printf("\n");
         }
    
         return 0;
     }
    

输入: 4

输出:

      1 
    2 3 2 
  3 4 5 4 3 
4 5 6 7 6 5 4 

【讨论】:

    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2019-09-14
    相关资源
    最近更新 更多