C中的图案打印用于以垂直图案打印数字

时间:2018-02-06 18:45:30

标签: c design-patterns pattern-matching

我写了一个函数来打印下面的模式。 例如,如果n值为 4 ,则模式为

1
2 7
3 6 8
4 5 9 10

或者,如果n的值 5 ,则模式为

1
2 9
3 8 10
4 7 11 14
5 6 12 13 15

我的功能给了我前两个块但不是下一个块。我被困在这里很久了!

我的功能是

int printPattern(int n) {
    int row, column, fwdCtr = 1, evenCtr = 0, ctr = n;
    for(row = 1; row <= n; row++) {
        fwdCtr = row;
        for(column = 1; column <= row; column++) {
            if(column % 2 != 0) {
                printf("%d ", fwdCtr++);
            } else {
                evenCtr = fwdCtr + ctr;
                printf("%d ", evenCtr);
                ctr = ctr - 2;
            }
        }
        printf("\n");
    }     
}

我得到的是

1
2 7
3 6 4
4 5 5 4

请提出改变建议!

2 个答案:

答案 0 :(得分:2)

以下代码应该这样做:

#include <stdio.h>

void f(int n)
{
    for (int i = 0; i < n; ++i)
    {
        for (int j=0; j<=i; ++j)
        {
            // Calculate the numbers used so far by previous columns
            int x = 0;
            for(int v=0; v<j;++v)
            {
                x = x + (n-v);  
            }

            if ((j % 2) == 0)
            {
                // even columns
                printf("%d ", x+i-j+1);
            }
            else
            {
                // odd columns
                printf("%d ", x+n-i);
            }
        }
        printf("\n");
    }
}

int main(void) 
{
    f(5);
    return 0;
}

输出:

1 
2 9 
3 8 10 
4 7 11 14 
5 6 12 13 15 

答案 1 :(得分:1)

最简单的方法是根据行和列以及n的值打印正确的数字,就像这样

int main(void)
{
    int n = 20;
    for (int row = 0; row < n; row++) {
        for (int col = 0; col <= row; col++)
           printf("%3d ", 1 + col*n - (col-1)*col/2 + (col%2 ? n-1-row : row-col));
        printf("\n");
    }
}