You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++星号与点金字塔实现求助:下半部分输出不符合预期

C++ 星号金字塔下半部分输出错误修复

我需要用C++实现由星号(*)和点(.)组成的金字塔,目前代码上半部分输出正确,但下半部分存在错误。输入size=4、n=7时,当前下半部分输出为.***、..**、...*,期望输出为***.、**..、*...。

原代码:

#include <iostream>

using namespace std;

int main() {
  int size, n;

  cin >> size;
  cin >> n;

  for (int R = 1; R <= size; R++) {
    if (R > n) {
      break;
    }
    for (int i = 1; i <= size; i++) {
      if (i > R) {
        cout << ".";
      } else {
        cout << "*";
      }
    }
    cout << endl;
  }

  for (int R = 1; R <= size - 1; R++) {
    if (R > n) {
      break;
    }
    for (int i = 1; i <= size; i++) {
      if (i > R) {
        cout << "*";
      } else {
        cout << ".";
      }
    }
    cout << endl;
  }

  return 0;
}

当前输出:

*...
**..
***.
****
.***
..**
...*

期望输出:

*...
**..
***.
****
***.
**..
*...

问题分析与修复

问题出在下半部分的内层循环判断逻辑:原逻辑是当i > R时输出星号,否则输出点,这会导致每行开头的点随R增大而增多,与期望结果完全相反。我们需要每行的星号数量从size-1递减到1,点的数量从1递增到size-1,可以通过两种方式修复:

方式1:调整内层判断条件

修改下半部分的内层循环判断逻辑,当i <= (size - R)时输出星号,否则输出点:

#include <iostream>

using namespace std;

int main() {
  int size, n;

  cin >> size;
  cin >> n;

  // 上半部分:从1个星号到size个星号
  for (int R = 1; R <= size; R++) {
    if (R > n) {
      break;
    }
    for (int i = 1; i <= size; i++) {
      cout << (i > R ? "." : "*");
    }
    cout << endl;
  }

  // 下半部分:从size-1个星号递减到1个星号
  for (int R = 1; R <= size - 1; R++) {
    if (R > n) {
      break;
    }
    for (int i = 1; i <= size; i++) {
      cout << (i <= (size - R) ? "*" : ".");
    }
    cout << endl;
  }

  return 0;
}

方式2:调整循环变量方向

让下半部分的R从size-1递减到1,直接复用上半部分的判断逻辑,代码更简洁:

#include <iostream>

using namespace std;

int main() {
  int size, n;

  cin >> size;
  cin >> n;

  // 上半部分:从1个星号到size个星号
  for (int R = 1; R <= size && R <= n; R++) {
    for (int i = 1; i <= size; i++) {
      cout << (i > R ? "." : "*");
    }
    cout << endl;
  }

  // 下半部分:从size-1个星号递减到1个星号
  for (int R = size - 1; R >= 1 && R <= n; R--) {
    for (int i = 1; i <= size; i++) {
      cout << (i > R ? "." : "*");
    }
    cout << endl;
  }

  return 0;
}

内容的提问来源于stack exchange,提问作者Shelly12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:16