【問題描述】
輸入金字塔的層數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;
}