如何打印带边和对角线的菱形图案?现有代码无法输出竖线
解决带边和对角线的菱形打印问题
问题描述
给定整数n(表示菱形的边长),编写程序打印包含边和对角线的菱形图案。
- 输入:单行输入一个整数n
- 输出:打印带边和对角线的菱形图案
样例输入:5
样例输出:
* *** * * * * * * ********* * * * * * * *** *
问题原因
你当前的代码仅判断了菱形的边缘、最底部和最顶部的整行星号,但遗漏了中间对角线位置的星号判断,这就是图案中缺少竖线(对角线星号)的原因。
修改后的代码
#include <iostream> using namespace std; int main() { int n; cin >> n; // 上半部分菱形 for (int i = 1; i <= n; i++) { // 打印前置空格 for (int j = 1; j <= n - i; j++) { cout << " "; } // 打印星号和空格 for (int j = 1; j <= 2 * i - 1; j++) { // 新增j == i的判断,对应中间对角线位置 if (j == 1 || j == 2 * i - 1 || i == n || j == i) { cout << "*"; } else { cout << " "; } } cout << endl; } // 下半部分菱形 for (int i = n - 1; i >= 1; i--) { // 打印前置空格 for (int j = 1; j <= n - i; j++) { cout << " "; } // 打印星号和空格 for (int j = 1; j <= 2 * i - 1; j++) { // 新增j == i的判断,对应中间对角线位置 if (j == 1 || j == 2 * i - 1 || i == 1 || j == i) { cout << "*"; } else { cout << " "; } } cout << endl; } return 0; }
代码说明
修改的核心是在上下半部分的星号判断条件中,增加了j == i的判断:
- 对于上半部分第i行,
j == i对应从左上到右下的对角线位置,会在该行中间打印星号; - 对于下半部分第i行,
j == i同样对应对称的对角线位置,保证图案的对称性。
这样修改后,程序就能正确输出包含边和对角线的菱形图案,与样例输出完全一致。
内容的提问来源于stack exchange,提问作者Prince Kumar Prajapati
相关产品推荐
相关产品推荐

