C++程式列印X星形圖案
以不同的形狀(如金字塔、正方形和菱形)顯示星形圖案是基礎程式設計和邏輯開發的常見部分。在我們學習程式設計中的迴圈語句時,我們遇到了各種涉及星形和數字圖案的問題。本文將演示如何使用星號列印X或十字形。
我們將看到兩種方法來實現相同的結果。第一種方法稍微複雜一些,但第二種方法效率更高。
X星形圖案(使用兩組空格)
* * * * * * * * * * * * * * * * *
對於此圖案,行數為n = 5。這是上半部分。整個X圖案有2n – 1行。讓我們看看如何使用下表來實現這一點:
行號 | 星號數量 | 左側空格 | 中間空格 | 描述 |
---|---|---|---|---|
1 | 2 | 0 | 7 | 當i = n時,列印一個星號,否則列印兩個星號。左側空格為(i – 1),中間空格為2(n – i) - 1 |
2 | 2 | 1 | 5 | |
3 | 2 | 2 | 3 | |
4 | 2 | 3 | 1 | |
5 | 1 | 4 | - | |
6 | 2 | 3 | 1 | 左側星號遞減,如n – (i – n) – 1 = 2n – i – 1。中間空格將遵循:2*(i – n) - 1 |
7 | 2 | 2 | 3 | |
8 | 2 | 1 | 5 | |
9 | 2 | 0 | 7 |
演算法
- 讀取n作為輸入
- 對於i從1到2n - i,執行以下操作
- 如果i <= n,則
- 對於j從1到i - 1,執行以下操作
- 顯示空格
- 結束迴圈
- 顯示星號
- 如果i和n不相等,則
- 對於j從1到2(n - i) - 1,執行以下操作
- 顯示空格
- 結束迴圈
- 顯示星號
- 對於j從1到2(n - i) - 1,執行以下操作
- 結束if
- 對於j從1到i - 1,執行以下操作
- 否則
- 對於j從1到2n - i - 1,執行以下操作
- 顯示空格
- 結束迴圈
- 顯示星號
- 對於j從1到2(i - n) - 1,執行以下操作
- 顯示空格
- 結束迴圈
- 顯示星號
- 對於j從1到2n - i - 1,執行以下操作
- 結束if
- 將游標移動到下一行
- 如果i <= n,則
- 結束迴圈
示例
#include <iostream> using namespace std; void solve( int n ){ for ( int i = 1; i <= 2*n - 1; i++ ) { if ( i <= n ) { for ( int j = 1; j <= i - 1; j++ ) { cout << ". "; } cout << "* "; if ( i != n ) { for ( int j = 1; j <= 2 * (n - i) - 1; j++ ) { cout << " "; } cout << "* "; } } else { for ( int j = 1; j <= (2 * n) - i - 1; j++ ) { cout << ". "; } cout << "* "; for ( int j = 1; j <= 2 * (i - n) - 1; j++ ) { cout << " "; } cout << "* "; } cout << "\n"; } } int main(){ int n = 8; cout << "X Star Pattern for " << n << " lines." << endl; solve( n ); }
輸出
X Star Pattern for 8 lines. * * . * * . . * * . . . * * . . . . * * . . . . . * * . . . . . . * * . . . . . . . * . . . . . . * * . . . . . * * . . . . * * . . . * * . . * * . * * * *
輸出(n = 10)
X Star Pattern for 10 lines. * * . * * . . * * . . . * * . . . . * * . . . . . * * . . . . . . * * . . . . . . . * * . . . . . . . . * * . . . . . . . . . * . . . . . . . . * * . . . . . . . * * . . . . . . * * . . . . . * * . . . . * * . . . * * . . * * . * * * *
使用網格方法
可以透過考慮一個網格來解決相同的問題,並且從這個網格中,我們可以計算出列印星號和列印空格的公式。
* | * | |||||||
* | * | |||||||
* | * | |||||||
* | * | |||||||
* | ||||||||
* | * | |||||||
* | * | |||||||
* | * | |||||||
* | * |
從上面的網格可以很容易地理解,星號只會在列號與行號相同(對角線)以及列號為(2n + 1 – i)時放置。
演算法
- 讀取n作為輸入
- m = 2n - i
- 對於i從1到m,執行以下操作
- 對於j從1到m,執行以下操作
- 如果j等於i或j等於(m + 1) - i,則
- 顯示星號
- 否則
- 顯示空格
- 結束if
- 如果j等於i或j等於(m + 1) - i,則
- 結束迴圈
- 將游標移動到下一行
- 對於j從1到m,執行以下操作
- 結束迴圈
示例
#include <iostream> using namespace std; void solve( int n ){ int m = 2*n - 1; for ( int i = 1; i <= m; i++ ) { for ( int j = 1; j <= m; j++ ) { if (j == i || j == (m + 1 - i)) cout << "* "; else cout << ". "; } cout << endl; } } int main(){ int n = 6; cout << "X Star Pattern for " << n << " lines." << endl; solve( n ); }
輸出
X Star Pattern for 6 lines. * . . . . . . . . . * . * . . . . . . . * . . . * . . . . . * . . . . . * . . . * . . . . . . . * . * . . . . . . . . . * . . . . . . . . . * . * . . . . . . . * . . . * . . . . . * . . . . . * . . . * . . . . . . . * . * . . . . . . . . . *
輸出(n = 8)
X Star Pattern for 8 lines. * . . . . . . . . . . . . . * . * . . . . . . . . . . . * . . . * . . . . . . . . . * . . . . . * . . . . . . . * . . . . . . . * . . . . . * . . . . . . . . . * . . . * . . . . . . . . . . . * . * . . . . . . . . . . . . . * . . . . . . . . . . . . . * . * . . . . . . . . . . . * . . . * . . . . . . . . . * . . . . . * . . . . . . . * . . . . . . . * . . . . . * . . . . . . . . . * . . . * . . . . . . . . . . . * . * . . . . . . . . . . . . . *
結論
星形圖案易於使用,並且對於學習程式設計迴圈概念很有用。本文演示瞭如何使用C++來顯示左對齊和右對齊半菱形圖案。然後,在考慮n行數的情況下,使用星號顯示X或十字圖案。為此,我們提供了兩種方法。一種使用填充和空格,另一種使用網格計算。我們添加了點而不是新增空格。否則,它們有時會從輸出中修剪空格。
廣告