0

我想要这样的东西:

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

我试过这个:

void roadBound() {

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

但它甚至没有接近。请帮忙

4

4 回答 4

1

到目前为止,您的代码产生了这个:

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

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

#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;
    }
}

此代码产生:

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

这似乎比您的示例多一些空格,但是您可以通过在循环之前添加一个变量以获得所需的最大空间长度来解决这个问题,然后每次通过循环将其递减两个。

于 2013-12-01T15:43:34.593 回答
0

这在另一个循环中使用了 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';
}

输出

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

实时代码

于 2013-12-01T15:20:28.473 回答
0

你可以试试这个

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;
}
于 2013-12-01T15:25:26.687 回答
0
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;
    }
}
于 2013-12-01T15:49:57.587 回答