C++與演算法

解答 - 金字塔製造機

解說

因為一定會印出N列,可以先寫好

for( i=1 ; i<=N ; i=i+1 )
{

    cout << endl;
}

接著觀察空白數、*數的規律。


觀察 N=3 的情況

  *
 ***
*****
  • 第1列 i=1,輸出
    • 2 個空白
    • 1 個*
  • 第2列 i=2,輸出
    • 1 個空白
    • 3 個*
  • 第3列 i=3,輸出
    • 0 個空白
    • 5 個*


觀察 N=5 的情況

    *
   ***
  *****
 *******
*********
  • 第1列 i=1,輸出
    • 4 個空白
    • 1 個*
  • 第2列 i=2,輸出
    • 3 個空白
    • 3 個*
  • 第3列 i=3,輸出
    • 2 個空白
    • 5 個*
  • 第4列 i=4,輸出
    • 1 個空白
    • 7 個*
  • 第5列 i=5,輸出
    • 0 個空白
    • 9 個*


印出空白與*

可以在for迴圈內部再寫2個for迴圈,分別印出空白與*

  • 空白數為N-i,可以用以下程式碼印出
for( j=1 ; j<=N-i ; j=j+1 )
{
    cout << " ";
}
  • *數為2i-1,可以用以下程式碼印出
for( j=1 ; j<=2*i-1 ; j=j+1 )
{
    cout << "*";
}



code

#include<iostream>
using namespace std;

int main()
{
    int N;
    int i, j;

    cin >> N;

    for( i=1 ; i<=N ; i=i+1 )
    {
        for( j=1 ; j<=N-i ; j=j+1 )
        {
            cout << " ";
        }
        for( j=1 ; j<=2*i-1 ; j=j+1 )
        {
            cout << "*";
        }
        cout << endl;
    }

    return 0;
}