题目描述
输入一个整数 n ,请打印出 n∗2+1 行的字符图形。
输入
一个整数(0<n<10)。
输出
一个字符图形,如输入 2 ,则产生 5 行的菱形(为方便找规律,这里将空格用 □ 替代,实际输出,请输出空格)。
□□×
□×××
×××××
□×××
□□×
样例
输入
2
输出
*
***
*****
***
*
解题思路
1)先明确输入输出有几个,这里输入只有1个,是int类型,每行输出是由空格和星号组成
2)这个题的图案和我们之前做的图案题目有些不一样,需要打印的是2*n+1行图案
3)观察图案,可以把图案分成上下两部分进行打印,这里可以把第3行和前面2行看作一个图案也可以把第3行和最后2行看作一个图案
4)我这里的思路是把第3行和上面部分作为一个图案,先找上部分图案的规律,这里上半部分的行数就是n+1行,再找下部分图案的规律,下半部分的行数就是n行,找到的规律如下:
代码实现
#include <iostream>
using namespace std;
int main(){
/*
思路:上下对称图形,我们采用先打印一半图形,然后将一半图形颠倒得到另外一半的方法实现
注意:首先到得到一半的图形的实际行数
规律:
i=1 2个空格 1个星
i=2 1个空格 3个星
i=3 0个空格 5个星
第i行 n+1-i个空格 2*i-1个星
*/
int n,i,j;
cin>>n;
//一半图形的行数为n+1行
for(i=1;i<=n+1;i++){
for(j =1;j<=n+1-i;j++){
cout<<" ";
}
for(j=1;j<=2*i-1;j++){
cout<<"*";
}
cout<<endl;
}
for(i=1;i<=n;i++){
for(j = 1;j<=i;j++){
cout<<" ";
}
for(j=1;j<=(n-i)*2+1;j++){
cout<<"*";
}
cout<<endl;
}
return 0;
}
标签:空格,个星,cout,星号,1071,图案,int,菱形,图形
From: https://blog.csdn.net/qq_41611106/article/details/142494028