写一道算法题“打印沙漏”

好家伙,写一道算法题

 

1.题目如下:

 

 

2.分析:

在此处我们以20为例子

 

 

 

将其分为两块,上三角和下三角

以中间层一个为零层,则每层的层数(x)与“星号”(y)的数量关系为y=2x+1;

 

在上三角区域中,这是一个等差数列,那么可以得出,上三角的“星号”总数为层数的平方

下三角区域中,数量为上三角“星号”总数“减去1

 

求余数的公式为:”输入的星星数量“-2*n*n+1

 

那么最关键的层数如何获得?

我们将”20“除以”2“后开方,再向下求整,就得到了层数(即2层)

 

再从代码结构上去看

________________________________

 

(  一个求出层数的算法  )

 

for(控制层数){

  for(){  打印空格  }

 

  for(){  打印"星号"  }  

}

________________________________

 

大致代码如下:

#include<stdio.h>
#include<math.h>

int main(){
    int i,j,a,b,m;
    double n;
    char ch;
    
    scanf("%lf %c",&n,&ch);
    
    a=n;
    n=n/2;
    n=floor(sqrt(n));    //求出层数
    
    for(i=n;i>0;i--){     //打印上三角
        
        for(j=0;j<n-i;j++){
            printf(" ");
        }
        for(j=0;j<2*i-1;j++){
            printf("%c",ch);
        }
        printf("\n");
    }
    

    for(i=1;i<n;i++){    //打印下三角

        for(j=n-1;j>i;j--){
            printf(" ");
        }

        for(j=0;j<2*i+1;j++){
            printf("%c",ch);
        }
        printf("\n");    
    }

    
    b=a-2*n*n+1;
    printf("%d",b);
    printf("\n");
    return 0;
}

 

但还是出了些许问题

 

 

问题待改正

posted @ 2022-03-15 00:00  养肥胖虎  阅读(40)  评论(0编辑  收藏  举报