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或十字圖案。為此,我們提供了兩種方法。一種使用填充和空格,另一種使用網格計算。我們添加了點而不是新增空格。否則,它們有時會從輸出中修剪空格。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP