Blackdeath
Blackdeath

Reputation: 151

Pattern Printing in C for printing numbers in vertical pattern

I wrote a function to print the below pattern. For example, if the n value is 4 the pattern is

1
2 7
3 6 8
4 5 9 10

Or if the value of n is 5, then the pattern is

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

My function gives me the first two block but not the next block. I'm stuck here for long time!

My function is

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

What I get is

1
2 7
3 6 4
4 5 5 4

Please give suggestions of changes!

Upvotes: 2

Views: 3075

Answers (2)

user3386109
user3386109

Reputation: 34839

The easy thing to do is just print the right number based on the row and column and the value of n, like this

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

Upvotes: 1

4386427
4386427

Reputation: 44340

The following code should do it:

#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;
}

Output:

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

Upvotes: 2

Related Questions