打印沙漏

Posted lxzlyf2022

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打印沙漏相关的知识,希望对你有一定的参考价值。

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。)

1)实验代码

2 #include<stdio.h>
 3 int main(){
 4     int i,j,k,n,l=1,t;
 5     char c=‘ ‘;
 6     scanf("%d %c",&n,&c);
 7     while(l*l*2-1<=n){
 8         l++;
 9     }
10     l--;//得到打印上三角的行数
11     k=l;
12     for(i=1;i<=k;i++){//打印上三角
13         for(j=1;j<i;j++){
14             printf(" ");
15         }
16         for(j=1;j<=2*l-1;j++){
17             printf("%c",c);
18         }
19         l--;
20         printf(" ");
21     }
22     t=k;
23     l=2;//下三角从第二行开始打印
24     for(i=2;i<=k;i++){//打印下三角
25         for(j=1;j<=t-i;j++){
26             printf(" ");
27         }
28         for(j=2*l-1;j>0;j--){
29             printf("%c",c);
30         }
31         printf(" ");
32         l++;
33     }
34     printf("%d ",n-(2*t*t-1));
35     return 0;
36 }

(2)解题思路:把沙漏分成上半三角和下半三角来看。符号*的总个数与第一行的个数和总行数,总列数有关(第一行个数=总行数=总列数)。每一行*个数减二等于下一行*个数,直到中间只有一个*。

(3)代码思路

if(A>N) n=n-1; for(i=1;i<=(2*n+1);i++)//控制沙漏的行

{ for(j=1;j<=(2*n+1);j++)//控制沙漏每一行的字符的个数

{ if (j>=i&&i+j<=2*n+2) cout<<M;//输出沙漏的上半倒三角

else if(j<=i&&i+j>=2*n+2) cout<<M; //输出沙漏的下面部分的三角

else if(j<i&&i+j<2*n+2) cout<<" ";//输出沙漏体左边的空格部分 }

cout<<endl;//每行输出后要转行 }

最主要是精准控制每一行和每一列的输出,i,j,n三者之间的关系要理清。

4)解题过程中存在的问题,以及如何得到解决的:之前在沙漏的右边以为有空格,一直答案错误,经过删去有关右边输出空格的代码后问题解决

5)运行截图

 



































以上是关于打印沙漏的主要内容,如果未能解决你的问题,请参考以下文章

打印沙漏

打印沙漏

打印沙漏

打印沙漏

打印沙漏

打印沙漏