C ++ For循环,Asterisk倒三角形

时间:2016-03-29 23:09:15

标签: c++ algorithm loops char

我需要你的帮助。 我需要编写一个有四个星号三角形的程序,一个在另一个上面。我对第三个三角形有困难。一个十行的倒三角形应该显示如下:

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

任何人都可以帮助我吗?

   #include <iostream>

   using namespace std;

   int main()
   {
   cout << "\nAsterisk Triangluar Patterns:\n";
   cout << "\nPattern (a).\n\n";
   int i,j,rows;
   int ROWS = 10;
   //initiates the max limit of rows and/ columns the triangle may have 
   int k = 11;

    for(i=1;i<=rows;i++)
        {
            for(j=1;j<=i;j++)
                {
                    cout << "*";
                }
                cout << endl;
        }
    cout << "\nPattern (b).\n\n";
    for (i = 10; i >= 1; i = i-1)
    {
    // begin second loop from 1 to i
    for (j = 1; j <= i; j = j+1)
    {
        cout << "*";
    }
    cout << endl;
    }         

    cout << "\nPattern (c).\n\n";
   for (int i = 0; i < 10; i++)
   {
     for(int j = 0; j < i; j++)
    {
        cout <<"*";
    }
    cout << endl;
    }
    cout << "\nPattern (d).\n\n";
    for (i=1;i<=rows;i++)
        {
            for(j=1;j<=i;j++)
                {
                    cout << "*";
                }
                cout << endl;
        }


    cin.get();

    cin.get();

        return 0;
  }

2 个答案:

答案 0 :(得分:1)

有很多方法可以完成这项任务。

例如

#include <iostream>
#include <iomanip>

int main()
{
    const size_t N = 10;

    for ( size_t i = 0; i < N; i++ )
    {
        std::cout << std::setw( i + 1 ) << std::setfill( ' ' ) << '*' 
                  << std::setw( N - i ) << std::setfill( '*' ) << '\n';
    }        
}    

程序输出

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

或通过标准算法

#include <iostream>
#include <algorithm>
#include <iterator>

int main()
{
    const size_t N = 10;

    for ( size_t i = 0; i < N; i++ )
    {
        auto out = std::ostream_iterator<char>( std::cout );
        *std::fill_n( std::fill_n( out, i, ' ' ), N - i, '*' ) = '\n';
    }            
}    

输出与上面显示的相同。

实际上你需要的是写三个循环:一个外循环和两个内循环。

答案 1 :(得分:0)

我能想到的最简单的方式:

#include <iostream>
#include <string>
#include <iomanip>

int main() {

   for ( int i = 10; i >= 0; --i )
       std::cout << std::setfill(' ') << std::setw(10) << std::string(i, '*') << std::endl;
       // or std::cout << std::string(10 - i, ' ') << std::string(i, '*') << std::endl;

   return 0;
}

然而,如果这让你感到困惑。你可以这样做:

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

更接近您的代码。