分析问题
先观察星号的规律,我们发现输出的星号与输入数字n相等,列数就确定了
再观察行数 也与输入的n相等,行数也就确定了
其次,就是解决空格的问题了,空格的规律是从行2行开始增加,但是到中位数以后,就每行减少
//解决空格问题思路
n=3 空格最大为1
n=5 空格最大为2
n=7 空格最大为3
发现规律 n/2=3 是最大空格数 假设n为7
继续列数据 并找规律
第1行 0个空格 i-1=0
第2行 1个空格 i-1=1
第3行 2个空格 i-1=2
第4行 3个空格 i-1=3
第5行 2个空格 n-i=2
第6行 1个空格 n-i=1
第7行 0个空格 n-i=0
建立模型
输入数字n
循环输出行数n
循环输出空格
当行数小于n的一半时,输出 行数减1个空格
当行数大于n的一半时,输出 数字n减去行数个空格
循环输出列数n
编写代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
//打印行
int tmp;
tmp = n/2;
for(int i=1;i<=n;i++){
//解决空格问题
/*
n=3 空格最大为1
n=5 空格最大为2
n=7 空格最大为3
发现规律 n/2=3 是最大空格数
继续列数据
第1行 0个空格 i-1=0
第2行 1个空格 i-1=1
第3行 2个空格 i-1=2
第4行 3个空格 i-1=3
第5行 2个空格 n-i=2
第6行 1个空格 n-i=1
第7行 0个空格 n-i=0
*/
if(i<=n/2+1){
for(int k=1;k<=i-1;k++){
cout<<" ";
}
}else{
for(int k=1;k<=n-i;k++){
cout<<" ";
}
}
//打印列
for(int j=1;j<=n;j++){
cout<<"*";
}
cout<<"\n";//给每行进行换行
}
return 0;
}