GfG QA is closing soon... Please refer PRACTICE or GfG now on wards !!

Printing matrix pattern. Code Failing for num > 36

                                                            53 
                                                  52                  54  
                                      51                  31                   55   
                            50                  30                  32                   56  
                  49                  29                  15                   33                  57
                            28                  14                  16                   34          
                  48                  13                   5                   17                  58
                            27                   4                   6                   35          
                  47                  12                   1                   18                  59
                            26                   3                   7                   36          
                  46                  11                   2                   19                  60
                            25                  10                   8                   37          
                  45                  24                   9                   20                  61
                            44                  23                   21                  38          
                  70                  43                  22                   39                  62
                            69                  42                   40                  63
                                      68                   41                   64   
                                                 67                   65    
                                                             66      

http://ideone.com/mbs6E2

#include <iostream>
using namespace std;
#define N 20
int hc[N][N];

void printArray()
{
	for(int i = 0; i < N; i++) 
	{
		for(int j = 0; j < N; j++)
		if(hc[i][j])
			printf("%3d  ", hc[i][j]);
		else 
			printf("     ");
		cout << endl;
	}
}

void fillArray( int &i, int &j, string directions[], int n, int round, int &num)
{
    for (int k = 0; k < n; k++)
    {
    	string dir = directions[k];
    	
    	for(int m = 0 ; m < round; m++)
		{
	        if (dir=="S") i += 2, m++;
	        else if (dir=="N") i -= 2;
	        else if (dir=="W") j -= 2;
	        else if (dir=="E") j += 2;
	        else if (dir=="NW")
	            j -=1, i -=1;
	        else if (dir=="NE")
	            j +=1, i -=1;
	        else if (dir=="SE")
	            j +=1, i +=1;
	        else if (dir=="SW")
	            j -=1, i +=1, m++;
	       
	        hc[i][j] = num;
	        num += 1;
		}
    }
}

int main() 
{
	int i = N/2;
    int j = N/2;
    int num = 1;
    hc[i][j] = num;
    num += 1;
	int round = 1;
	
	string directions1[] = {"S", "NW", "N", "NE", "SE", "S" };
	int n = sizeof(directions1)/sizeof(directions1[0]);
    fillArray(i, j, directions1, n, round, num);
    
    string directions2[] = {"S", "SW", "NW", "N", "NE", "SE", "S"};
    n = sizeof(directions2)/sizeof(directions2[0]);

    while(num < 36)
    {
    	round++;
    	fillArray(i, j, directions2, n, round, num);
    }
    
    printArray();

	return 0;
}

 

asked May 26, 2016 by aditya.goel
edited May 26, 2016 by aditya.goel
...