在C中打印奇数散列倒三角形

在C中打印奇数散列倒三角形,c,C,我试图打印出一个倒三角散列 ./upside_down_oddnumber ########### ####### ### 我迄今为止的工作- int main(void) { int row, column; int size; printf("Enter size: "); scanf("%d", &size); row = 1; while (row <= size) { column = 1; while (column &l

我试图打印出一个倒三角散列

./upside_down_oddnumber

###########

  #######  

    ### 
我迄今为止的工作-

int main(void) {
int row, column;
int size;

printf("Enter size: ");
scanf("%d", &size);

row = 1;
while (row <= size) {

    column = 1;
    while (column <= size) {
        if (row == (4 * size) -1 || row == column) {
            printf("#");
        } else {
            printf(" ");
        } 

        column++;

    }    

    printf("\n");
    row++;
}    
return 0;
} 
int main(无效){
int行,列;
整数大小;
printf(“输入大小:”);
scanf(“%d”,大小(&S);
行=1;

while(row问题在于if语句。 第一部分
row==(4*size)-1
永远不会为真,因为该行永远不会比size大,所以4*size总是比row大,因此该语句永远不会为真。
第二节
row==column
当然会给您一行。
你应该重新考虑你的算法。

首先检查问题背后的算法:

  • 4*size-1
    #
    顶部行的长度,即打印输出的
    宽度
  • 每行都有一个空格偏移量
  • 对于初始行,空格数从零开始,增加2
这三个观察值应足以构成一个程序。为保持一致性,行号和列号应以零开始。每行的长度应为
宽度
个字符。使用以下公式确定要打印的字符:

if (column >= offset && column < width-offset) {
    printf("#");
} else {
    printf(" ");
} 
if(列>=偏移量和列<宽度偏移量){
printf(“#”);
}否则{
printf(“”);
} 
或者你可以这样做

for(i=size; i>0; --i)
{
    for(j=0; j<(4*size-1 - (4*i-1))/2; ++j)
    {
        printf(" ");
    }
    for(j=0; j<4*i-1; ++j)
    {
        printf("%c", '#');
    }
    printf("\n");
}
而不是循环来打印空格


%*s
中的
*
用于指定要打印的字符串的宽度。

预期结果是什么?@KrzysztofSzewczyk是一个倒散列三角形,但每行都有奇数降序值。
printf("%*s", (4*size-1 - (4*i-1))/2, "");