写一道算法题“打印沙漏”
好家伙,写一道算法题
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; }
但还是出了些许问题