算法:
第一个的代码的思想是以前从网上看到的,原理很简单,就是利用高中数学中线性规划的知识; 第二个代码是利用图案的对称关系,其总共有5*2-1行,分析可知,每行的空格数量是:5-当前行数;每行的空格数量是:行数*2-1;图形两侧的数字相加 == 11 == 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; }
原文:http://blog.csdn.net/li_jun_09_05/article/details/23030719