如何使用最少数量的循环和变量在 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/