2024年4月22日发(作者:)

打印n行星号沙漏

题目描述

陈老师需要打印输出一个沙漏符号,请你用c++编一个程序帮陈老师打印

一个沙漏符号。。

n=3的图形如下所示:

***

*

***

n=5的图形如下所示:

*****

***

*

***

*****

输入

一个整数n,符号的行数(保证n是大于1的奇数)。

输出

沙漏符号,使用“*”打印

分析

1.把打印结果看成由上,下两部分组成

(1)上面部分3行,可以理解为n/2+1

(2)下面部分2行,可以理解为n/2

2.上面的图形看成由1号、2号等2个三角形组成;1号、2号三角形看成

是独立的三角形,每行输出每种三角形每行字符的个数即可。

2

1

n=5 x=n/2+1=3

行数i

1

2

3

1~x

1号空白三角形

1

2

i-1

2号星形三角形

5

3

1

n-2*i+2

3.下面的图形看成由1号、2号等2个图形组成;1号、2号图形看成是独

立的图形,每行输出每种图形每行字符的个数即可。

1

2

n=5 x=n/2+1=3

行数i

1

2

1~x-1

1号空白三角形

1

0

x-1-i

2号图形

3

5

2*i+1

代码

#include

using namespace std;

int main(){

int n,i,j,k,x;//k表示空格的数量

cin>>n;

x=n/2+1;//上面部分图形的行数(比下面部分图形多一行)

for(i=1;i<=x;i++){//输出上面x行的图形

for(k=1;k<=i-1;k++){//首先输出每一行空格的数量

cout<<" ";

}

for(j=1;j<=n-2*i+2;j++){//然后输出每一行*号的数量

cout<<"*";

}

cout<

}

for(i=1;i<=x-1;i++){//输出下面x-1行的图形

for(k=1;k<=x-1-i;k++){//首先输出每一行空格的数量

cout<<" ";

}

for(j=1;j<=2*i+1;j++){//然后输出每一行*的数量

cout<<"*";

}

cout<

}

}