【问题标题】:Creating Patterns in C++在 C++ 中创建模式
【发布时间】:2016-09-11 15:28:19
【问题描述】:

这可能有一个非常简单的解决方案,但我就是想不通。我创建了由这段代码生成的星号模式:

#include <iostream>
using namespace std;


int main()
{

    int i, j;
    for (i = 0; i<=10; i++)
    {
        for (j = 0; j<i; j++)
            cout << "*";
        cout << "\n";
    }
    cout << "\n\n";
    for (j = 10; j>0; j--)
    {
        for (i = 0; i<j; i++)
            cout << "*";
        cout << "\n";
    }
    cout << "\n";
    for (j = 10; j>0; j--)
    {
        for (i = 0; i<j; i++)
            cout << "*";
        cout << "\n";
    }
    cout << "\n";
    for (i = 0; i<=10; i++)
    {
        for (j = 0; j<i; j++)
            cout << "*";
        cout << "\n";
    }
    return 0;

}

如您所见,代码生成了四个星号模式块。我的问题是我需要最后两个块看起来像这样:

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

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

我在想我需要在这两个中的另一个 for 循环,这将使每一行以适当数量的空格开头,但我一直在努力制定这一点。任何建议将不胜感激。

【问题讨论】:

  • “设计模式”标签在这里不合适(请批准删除它的编辑)。这是关于视觉模式的。

标签: c++ for-loop


【解决方案1】:

#包括 使用命名空间标准;

int main() {

int i, j;

for (j = 10; j>0; j--)
{
     for(i=j;i<10;i++)
        cout<<  " ";
     for (i = 0; i<j; i++)
        cout << "*";

    cout << "\n";
}
cout << "\n";
for (i = 0; i<=10; i++)
{
    for(j=i;j<10;j++)
        cout<<  " ";

    for (j = 0; j<i; j++)
        cout << "*";
    cout << "\n";
}
return 0;

}

我认为你可以使用上面的代码,你应该在循环打印“*”之前计算出多少个空格

【讨论】:

    【解决方案2】:

    使用 iomanip 定义输出宽度并打印由 asterixes 组成的字符串的替代方法是什么?这将使代码更简单!

    为了避免重复自己,您可以将其嵌入一个循环中(一次迭代将相当于您以前的块中的 1 个)并根据计数器 z 是否为奇数来切换增加和减少(z &amp; 1 false)甚至。

    所以你的整个程序看起来像:

    for (int z=0; z<4; z++) {
        for (int i=0; i<10; i++)
            cout << setw(10) << string( (z&1 ? i:10-i), '*')<<endl; 
    }
    

    Online demo

    【讨论】:

      【解决方案3】:

      最简单的(没有奇怪的语法和技巧)是:

      #include <iostream>
      #include <iomanip>
      
      
      int main(){
      
      
          const int SIZE = 10;
          for (int i = 0; i < SIZE; ++i){ //increment index
      
              std::cout << std::setw(i + 1); //print whitespace
      
              for (int j = 0; j < SIZE - i; j++){
                  std::cout << '*'; //print asterisks
              }
              std::cout << std::endl;
          }
      
      
      
          for (int i = SIZE; i >= 0; --i){ //decrement index
      
              std::cout << std::setw(i + 1); //print whitespace
      
              for (int j = 0; j < SIZE - i; j++){
                  std::cout << '*'; //print asterisks
              }
              std::cout << std::endl;
          }
      
      
          return 0;
      }
      

      输出:

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

      您也可以更改SIZE,因为这很有趣:

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

      【讨论】:

        猜你喜欢
        • 2019-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多