在C中打印奇数哈希倒三角形

时间:2018-03-24 11:55:57

标签: 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 <= size) {
        if (row == (4 * size) -1 || row == column) {
            printf("#");
        } else {
            printf(" ");
        } 

        column++;

    }    

    printf("\n");
    row++;
}    
return 0;
} 

目前正在横向打印对角线,我应该使用等式4n-1。我该怎么办?任何帮助将不胜感激!! 谢谢:))

3 个答案:

答案 0 :(得分:1)

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

  • 4*size-1#顶行的长度,即打印输出的width
  • 每行都有空格偏移
  • 初始行的空格数从零开始,增加2

这三个观察结果应该足以构建一个程序。将行和列编号设置为零以保持一致性。每行的长度应为width个字符。使用以下公式确定要打印的字符:

if (column >= offset && column < width-offset) {
    printf("#");
} else {
    printf(" ");
} 

Demo.

答案 1 :(得分:0)

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

答案 2 :(得分:0)

或者你可以做到

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");
}

(4*size-1 - (4*i-1))/2将给出每行开头必须打印的空格数。

打印所需数量的空格后,将打印#

您也可以使用

printf("%*s", (4*size-1 - (4*i-1))/2, "");

而不是循环来打印空格。

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