在 C 中打印此特定三角形图案的最佳方式/方法是什么?

What is the best way / approach to printing this specific triangle pattern in 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;
}

它打印这个:

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

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

将此添加到第二个 For 循环:

if(i==0||i==x-1)
  printf("+");
else
  printf("-");

你可以看看here

你总是需要至少打印一个+,所以你可以把第一个跳出循环,无条件打印。在此之后,您希望在循环的第一次和最后一次迭代中打印 +。第一次迭代将是 i=0。由于循环迭代直到 i

int printTriangleFor(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++)
        {
            if ((i==0) || (i == x-1)) {
                printf("+");
            } else {
                printf("-");
            }
        }
        printf("\n");
    }
    return 0;
}

另外,请注意您的程序在外循环的第一次迭代中打印了一行空空格。不确定是否需要这样做。

anyone can lead me in the right direction?

首先我们需要索引系统。您已经有了索引 - xi 是循环迭代器,x 索引从 1height 的行,i 索引 +/- 每行中从 0x - 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)

在所有其他地方我们应该打印-。你可以试一下“we should print -, when ...”,也许对你来说会更容易想象。然后它在条件之间找到合适的 &&||。总计:

    for(i=0; i<x; i++) {
        if (x < 2 || x == height || i == 0 || i == (x - 1))
            printf("+");
        else
            printf("-");
    }
    printf("\n");
#include <stdio.h>
int main(){
int i, j, h=7;
for(i=1; i<=h; i++){
    for(j=i; j<h; j++){
        printf(" ");
    }
    for(j=1; j<=i; j++){
        if(i==h || j==1 || j==i){
            printf("+");
        }
        else{
            printf("-");
        }
    }
    printf("\n");
}
}

我给你我的解决方案,最接近 code golfing:

x,i,j;void f(int h){for(x=0;x<=h;x++){for(j=i;j<h;j++)printf(" "); \
for(i=0;i<x;i++)printf("%c",45-2*(!i||i==x-1||x==h));printf("\n");}}

int main(void) {
    f(8);
}

注意:希望您不要介意缺乏可读性