我试图打印以下形状:
*
* *
* * *
* * * *
* * *
* *
*
我将它分成2个嵌套循环。一个用于前四行(增量),另一个用于最后3行(减量),代码如下:
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= i; j++) {
cout << "*" << " ";
}
cout << '\n';
}
for (int i = 3; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
cout << "*" << " ";
}
cout << '\n';
}
是否可以仅使用一个嵌套循环打印此形状?
答案 0 :(得分:1)
正如@ user463035818在评论中所说,你可以使用绝对值来做到这一点。方法如下:
#include <cstdlib> // std::abs
for (int line = 1; line < 8; line++)
{
int numberOfStars = 4 - std::abs(4 - line);
for (int i = 0; i < numberOfStars; i++)
std::cout << "*" << " ";
std::cout << "\n";
}
在我看来,非常优雅和简单。
答案 1 :(得分:1)
如果您不需要星号之间的空格,则可以使用
#include <iostream>
#include <string>
#include <cstdlib>
int main() {
for (int i = -3; i <= 3; ++i){
std::cout << std::string(4 - std::abs(i), '*') << "\n";
}
}
只有一个循环:内部循环被委托给std::string
构造函数。
答案 2 :(得分:1)
为了好玩,基于Bathsheba's answer(但不使用std::string
和缺少的空格):
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
for (int i = -3; i <= 3; ++i) {
std::fill_n(std::ostream_iterator<const char*>(std::cout), 4 - std::abs(i), "* ") = "\n";
}
}
答案 3 :(得分:0)
int i = 0;
while (i < 7) {
int j = 0;
while (j < 4) {
if (i >= j && i + j < 7)
std::cout << "* ";
j++;
}
i++;
std::cout << '\n';
}