如何使用c ++制作三角形内部空白?

时间:2014-09-19 04:21:25

标签: c++

我确实对我的代码进行了很多修改,但是我得不到我想要的东西:

示例如果我将7放在变量N中,结果将显示

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

这是我的代码

#include <iostream>

using namespace std;

int main()  {
    for (int x=1; x<=N; x++){
        cout<<"*";
        for (int y=1; y<x; y++){
            cout<<"*";
        }
        cout<<"\n";
    }
    return 0;
}

我必须添加到我的代码中的结果如上?

3 个答案:

答案 0 :(得分:2)

由于其他人已经建议这可能是家庭作业,这里有一些提示:

  • 始终确保您拥有valid main signatureint main()已足够,main()没有返回类型无效。
  • 启用警告。对于大多数情况,-Wall -pedantic应该足够了(即,它会发现上述错误),但-Wextra也很有用。
  • using namespace std;被认为是不好的做法,因为您可以定义与导入的名称冲突的函数或变量名。养成输入std::的习惯。 (例如,作业可能要求您拥有distance功能,这可能与std::distance冲突。
  • 使用描述性变量名称。对于一个简单的程序,xyN很好,但会降低可读性。它还可以帮助您直观地了解您要解决的问题。

我们知道y总是最多x,因为每行的字符数应该等于当前行。例如,第7行应包含7个星号。如果y不等于零或x - 1,我们只会打印一个空格,因为这应该是我们的&#34; border&#34;。最后,最后一行应包含所有星号。

// The amount of asterisks per line is [1, N]
for (int x = 1; x <= N; x++)
{
    // x is the amount of characters we want to print per line
    for (int y = 0; y < x; y++)
    {
        // If we at the beginning or end of a line, this is our "border".
        // Print an asterisk.
        if (y == 0 || (y + 1 == x))
            std::cout << "*";
        else
        {
            // Otherwise we are "inside" the triangle.
            // If this is the last line, print all asterisks
            if (x == N)
                std::cout << "*";
            else
                std::cout << " ";
        }
    }
    std::cout << "\n";
}

另外,正如另一个答案所示,您可以通过将条件置于单个变量中来消除混淆if结构的需要。

bool space_or_asterisk = (y == 0 || (y + 1 == x) || x == N);
std::cout << (space_or_asterisk ? '*' : ' ');

答案 1 :(得分:2)

虽然您已经得到了几个有效的答案,但如果您消除令人困惑的if / then / else语句,逻辑可能会更简单:< / p>

#include <iostream>

int main() {
    static const char chars[] = "* ";
    static const int size = 7;

    for (int i=0; i<size; i++) {
        for (int j=0; j<size; j++)
            std::cout << chars[j!=0 && i!=j && bool(i+1-size)];
        std::cout << "\n";
    }
}

虽然逻辑显然更简单,但如果你把它作为家庭作业,你仍然要确保学习它足以回答任何问题。

答案 2 :(得分:0)

main()  {
    for (int x=1; x<=N; x++){
        for (int y=1; y<=x; y++){
           if(y==1||y==x||x==N){
              cout<<"*";
           }else{
              cout<<"*";
           }
        }
        cout<<"\n";
    }
    return 0;
}