C++程序设计:输出n层金字塔图形
【问题描述】
输入金字塔的层数n(n为正整数),输出由字符*组成的金字塔图形。最底层的字符数为2n-1,最上层字符数为1。字符图形水平居中对齐(使用空格填充)。
【样例输入】
5
【样例输出】
*
***
*****
*******
*********
【分析】
输出金字塔图形的关键就是确定每一行空格数、星号数与金字塔层数、所在行数的关系。
每一行应该输出多少星号很容易确定,第i行输出2i-1个星号就可以了。
那么在每一行的星号之前,输出需要多少空格呢?这就与金字塔的层数n有关了。
我个人认为这样计算空格数最为简单:
首先计算第一行的空格数x。第一行有一个星号,这个星号左边有x个空格,右边也有x个空格的位置。
也就是说,第一行有2x+1个字符。
最后一行的空格数为0,只有2n-1个星号,n为金字塔的层数。
也就是说,最后一行有2n-1个字符。
怎样保证金字塔的对称性?对了,就是每一行的字符数都相同,所以:2x+1=2n-1,x是多少不用再解释了吧!
我们不需要求每一行的空格数,每一行都比上一行少输出一个空格就可以了。
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
int n;
cin>>n;
int i,count,m,konggeshu;
konggeshu=(2*n-2)/2;
for(i=1;i<=n;i++){
count=2*i-1;
for(m=1;m<=konggeshu;m++)
cout<<" ";
for(m=1;m<=count;m++)
cout<<"*";
konggeshu--;
cout<<endl;
}
return 0;
}