首页 > 解决方案 > 在 C 中打印这种特定三角形图案的最佳方式/方法是什么?

问题描述

目标是在调用时打印printTriangle(7);

      +
     ++
    +-+
   +--+
  +---+
 +----+
+++++++

到目前为止,这是我的方法:

int printTriangle(int height)
{
    int x, i, j, space;
    space = height-1;
    for(x=0; x<=height; x++)
    {
        for(j=0; j<=space; j++)
        {
            printf(" ");
        }
        space--;
        for(i=0; i<x; i++)
        {
            printf("+");
        }
        printf("\n");
    }
    return 0;
}

它打印这个:

      +
     ++
    +++
   ++++
  +++++
 ++++++
+++++++

我似乎无法找到一种方法来为“-”的内部三角形设置正确的条件,任何人都可以引导我走向正确的方向吗?

标签: cprintf

解决方案


任何人都可以引导我朝着正确的方向前进吗?

首先我们需要索引系统。您已经有了索引 -x并且i是循环迭代器,x索引行 from 1to heighti索引+/-字符 from 0tox - 1每一行。

x|                for(x=0; x<=height; x++)
0|
1|         +
2|        ++
3|       +-+       
4|      +--+
5|     +---+
6|    +----+
7v   +++++++
i----0123456-->   for(i=0; i<x; i++)

所以首先尝试用词来制定条件,然后将它们转化为索引。例如,我们应该打印+

  • 在前两行 -x < 2
  • 在最后一行 -x == height
  • 在行的第一个字符上 -i == 0
  • 在行的最后一个字符上 -i == (x - 1)

在所有其他地方,我们应该打印-. 你可以试试“我们应该打印-,当……”,也许你会更容易想象。然后它在条件之间找到合适&&||。全部一起:

    for(i=0; i<x; i++) {
        if (x < 2 || x == height || i == 0 || i == (x - 1))
            printf("+");
        else
            printf("-");
    }
    printf("\n");

推荐阅读