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