1. 程式人生 > >Problem 16.“掏空”的三角形

Problem 16.“掏空”的三角形

Problem 16.“掏空”的三角形

題目簡述:

    每行包含一個字元和一個整數n(0<n<41),整數n表示等腰三角形的高,用字元做一個掏空的三角形。每個樣板三角形之間應空上一行且遇到@字元就結束。

解題思路:

分析圖形的特點可知,若給定輸出行數為n的鏤空三角形,變數i為每行的行數,那麼最後一行元素的個數為2*i-1, 每行輸出的第一個符號前有n-i個空格,且從第二行起首尾兩個符號之間有2*i-3個空格(除最後一行)

細節處理:

    注意題目給了一個要求為每個樣板三角形之間應空上一行。(本人就沒注意到,提交好幾遍才AC)

原始碼:

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int n,sign=1;
    char a;
    while(cin>>a>>n)
    {
        if(sign!=1) cout<<endl;
        if(a=='@') break;
        if(n!=1)
        {
            for(int i=1;i<=n;i++)
            {
                if(i==1)
                cout<<setw(n-i)<<" "<<a<<endl;//控制字元前的空格數
                if(i!=1&&i!=n)
                cout<<setw(n-i)<<" "<<a<<setw(2*i-3)<<" "<<a<<endl;//控制字元前和字元之間的空格數
                if(i==n)
                {
                    for(int j=1;j<=2*n-1;j++)
                    cout<<a;
                    cout<<endl;
                }
            }
        }
        if(n==1) cout<<a<<endl;
        sign=0;
    }
    return 0;
}