算法:
第一个的代码的思想是以前从网上看到的,原理很简单,就是利用高中数学中线性规划的知识; 第二个代码是利用图案的对称关系,其总共有5*2-1行,分析可知,每行的空格数量是:5-当前行数;每行的空格数量是:行数*2-1;下面最后4行的图案是根据上面4行的图案换算得来的。
运行效果1 运行效果2
#include <iostream>
#include <cmath>
using namespace std;
int main(void)
{
short int n;
while(cin>>n)
{
for(int i=-n; i<=n; i++)
{
for(int j=-n; j<=n; j++)
abs(i)+abs(j) >= n ? cout<<" " : cout<<"*";
cout<<endl;//可适当更改abs(i)+abs(j) 和 n的关系,比如>=
}
}
return 0;
}
#include <iostream>
using namespace std;
int main(void)
{
int n; //n代表要打印图案的行数(母图)h_1代表行数 h_2也是代表行数 l代表列数。
while(cin>>n)
{
for(int h_1=1,h_2=1; h_1<=2*n-1; h_1++)
{
if( h_1 > n)
h_2 = 2*n - h_1;
else
h_2 = h_1;
for(int l=n-h_2; l>=1; l--)
cout<<" ";
for(int l=1; l<=2*h_2-1; l++)
cout<<"*";
cout<<endl;
}
}
return 0;
}