仅带有一个内环的打印图案

时间:2018-10-19 19:17:11

标签: c++

*****
 ****
  ***
   ** 
    *

使用多个内部循环很容易打印此内容。我正在尝试仅使用一个内部循环来实现它。

有什么建议吗?

谢谢。如果n是动态的怎么办?如果n为10或5或100,该怎么办?

如果n为3,

***
 **
  *

如果n为5

*****
 ****
  ***
   ** 
    *

条件: 必填:仅一个内部语句,一个外部循环,仅cout语句。没有内置功能。<​​/ p>

如果需要更多说明,请告诉我。

代码:

    #include <iostream>

using namespace std;

int main() {
    int rows = 10;
    for(int i = rows; i >= 1; --i) {
        for(int k = 1; k <= (rows - i); k++) {
            cout  << "  ";
        }
        for(int j = 1; j <= i; ++j)
        {
            cout << " " << "*";
        }
        cout << endl;
    }
}

我如何只有一个内部循环来实现这一目标?

1 个答案:

答案 0 :(得分:-3)

内循环?你为什么需要这样的东西?您可以使用std::string::string

进行单个for循环
void print_stuff(unsigned width){
  for(auto i = 0u ; i < width ; i+=1){
    auto starAmount = width - i;
    auto spaceAmount = i;
    std::cout << std::string{spaceAmount, ' '} << std::string{starAmount, '*'} << '\n';
  }
}

如果您确实需要一个内部循环,则只需将std::string的构造函数替换为循环即可:

void print_stuff(unsigned width){
  for(auto i = 0u ; i < width ; i+=1){
    //auto starAmount = width - i;
    auto spaceAmount = i;

    for(auto j = 0u ; j < width ; j+=1)
      std::cout << (j < spaceAmount ? ' ' : '*');
    std::cout << '\n';
  }
}