c++ - 星星菱形使用c++

标签 c++

如何使用最少数量的循环和变量在 C++ 中以菱形输出以下星号。最大数量星数 = n(从用户那里获取的输入)

  *
 * *
* * * = n
 * * 
  *

我尝试只用 2 个循环来做,但没有成功,而且程序太复杂难以理解,所以没有在这里包含它。

那么你能想到什么算法?

最佳答案

那不是金字塔,那是菱形:)

不管怎样,让我们​​看看星星数:

  • n=1 -> 1 星
  • n=2 -> 4 颗星
  • n=3 -> 9 颗星

该模式看起来像是从 1 到 n 减去 n 的和的两倍(因为中间行存在一次而不是两次),所以 s(n) = 2 * (1+n)/2 * n - n = (1+n)*n-n = n*n 嘿,这是正方形的面积!多么令人惊讶。 :-)

现在如何绘制一个n大小的菱形:

  • 将有 2*n-1
  • 每行的宽度为w = 2*n-1 个字符
  • 每第 i 行(从 i=0 开始)有 m = min(i+1, 2*n-1-i) 星,和 m-1它们之间的空格
  • 所以每一行需要 w - (m) - (m-1) 两边的空间填充,即 w/2 左右两侧。

现在开始写吧! :)

关于c++ - 星星菱形使用c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8816348/

相关文章:

c++ - 获得垃圾值

c++ - 缺少虚拟关键字的警告

c++ - 派生类的类模板参数推导失败

c++ - 重载 '==' 会让你得到 '!=' 吗?

c++ - 三元运算符缓存不友好吗?

c++ - 再次不稳定 : necessary to prevent optimization?

c++ - 如何在 C++ 文件中保存执行的输出命令行

c++ - 使用 JNI 调用 API 创建 java7 JVM

C++ 预期主表达式错误

c++ - block 评论开头的感叹号有什么用?