码迷,mamicode.com
首页 > 其他好文 > 详细

打印沙漏

时间:2019-02-13 14:21:44      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:题解   --   bsp   有关   部分   解题思路   如何   空格   clu   

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差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("\n");
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("\n");
32         l++;
33     }
34     printf("%d\n",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)运行截图

 

打印沙漏

标签:题解   --   bsp   有关   部分   解题思路   如何   空格   clu   

原文地址:https://www.cnblogs.com/lxzlyf2022/p/10369520.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!