用c++创建模式

Creating Patterns in C++

本文关键字:模式 创建 c++      更新时间:2023-10-16

可能有一个非常简单的解决方案,但我就是想不出来。我已经创建了由以下代码生成的星号模式:

#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 << "nn";
    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循环在这两个将使每行以适当数量的空格开始,但我坚持试图制定这个。如有任何建议,不胜感激。

#include使用命名空间std;

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;

}

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

如果使用iomanip为输出定义宽度,并打印由星号组成的字符串,该怎么办?这将使代码更简单!

为了避免重复,你可以将它嵌入到一个循环中(一次迭代将相当于你之前的一个块),并根据计数器z是奇数(z & 1假)还是偶数来切换增减。

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

for (int z=0; z<4; z++) {
    for (int i=0; i<10; i++)
        cout << setw(10) << string( (z&1 ? i:10-i), '*')<<endl; 
}
<<p> 在线演示/strong>

最简单的(没有奇怪的语法&

#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因为fun:

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