我想知道如何使用循环在C++中制作星号直角三角形

I'd Like to know how to make an asterisk right triangle(S) in C++ using a loop

本文关键字:直角三角形 C++ 想知道 何使用 循环      更新时间:2023-10-16

我想要这样的东西:

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

我试过这个:

void roadBound() {
    for( int i = 1; i <= 10; i++ ){
        for( int j = 0; j < i; j++ ){
           cout << "*" ;
        }
        cout << endl;
    }
}

但它甚至还没有接近。请帮助

到目前为止,您的代码生成以下内容:

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

这看起来像一个很好的直角三角形,所以我认为你走在正确的轨道上。为了制作上面的图像,你需要留出一些空间,并确保每一行的长度都相同。如果可以的话,我认为只需要一个循环,你的要求就会容易得多。试试这个:

#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
int main() {
int height = 4;
int line = height * 4;
for( int i = height; i > 0; --i ){
        string stars (i, '*');
        int space = line - (i * 2);
        string spaces (space, ' ');
        cout << stars << spaces << stars << endl;
    }
}

此代码生成:

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

它似乎比上面的例子多了几个空间,但你可以通过在循环之前添加一个变量来获得你想要的最大空间长度,然后在循环中每次递减两个来解决这个问题。

这在另一个循环中使用3个循环

const int ROW = 4;
const int GAP = 7;
for (int i=ROW, g=GAP; i>=0; i--, g+=2)
{
    for (int j=0; j<i; j++) cout << '*';
    for (int j=0; j<g; j++) cout << ' ';
    for (int j=0; j<i; j++) cout << '*';
    cout << 'n';
}

输出

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

实时代码

你可以试试这个

int lf=4,md=4, N=4;
for( int i = 1; i<=N; i++ )
{
   for( int j =1; j<=lf; j++ )
      cout<<"*";
    for( int j =1; j<=md; j++ )
      cout<<" ";
    for( int j =1; j<=lf; j++ )
      cout<<"*";
    cout<<"n";
       lf--;
      md+=2;
}
void roadBound(int n) {
    const int gap = 6;
    string str = string(n, '*') + string(gap, ' ') + string(n, '*');
    int f=n,b=n+gap-1;
    while(n--){
        str[f--]=str[b++]=' ';
        cout << str << endl;
    }
}