我需要你的帮助。 我需要编写一个有四个星号三角形的程序,一个在另一个上面。我对第三个三角形有困难。一个十行的倒三角形应该显示如下:
**********
*********
********
*******
******
*****
****
***
**
*
任何人都可以帮助我吗?
#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;
}
答案 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;
}
更接近您的代码。