-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspiral number pattern.c
59 lines (51 loc) · 1.77 KB
/
spiral number pattern.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<stdio.h>
/*numbers from 1 to 49 are printed spirally in form of a square,
starting from the middle of the square.
*/
int layerFinder(int row, int col, int dim)
{
// row 0 col 0 to 7
// col 7 row 0 to 7
// row 7 col 0 to 7
// col 0 row 0 to 7
int no_of_layers, r=0, c=dim-1, layerctr;
no_of_layers = dim % 2 == 0 ? dim/2 : dim / 2 + 1;
for(layerctr = 1; layerctr <= no_of_layers; layerctr++,r++,c--)
{
if(row == r && (col >= r && col <=c) || row == c && ( col >= r && col<=c) ||\
( col == c && (row >=r && row <=c ) || ( (col == r) && (row >= r && row <=c))))
break;
}
return layerctr;
}
int getOffset(int row, int col, int dim)
{
if(row == 0) return col+1;
//printf("right %d", col+1);
else if(col == (dim- 1)) return dim + row;
//printf("down %d" , dim + row);
else if (row == (dim- 1)) return dim + (dim-1) + (row - col);
// printf("left %d " , dim + (dim-1) + (row - col));
else return dim + (2 * (dim - 1))+(dim - 1- row);
// printf("up %d", dim + (2 * (dim - 1))+(dim - 1- row));
}
int main()
{
int row, col, dim = 7,layer_number, offset=0,newdim, newrow, newcol, ctr;
for(row = 0; row < dim; row++,printf("\n") )
{
for(col = 0; col < dim; col++, offset = 0)
{
layer_number = layerFinder(row, col, dim);
//printf("%d ", layer_number);
for(ctr = 1, newdim = dim; ctr < layer_number; ctr++, newdim-=2)
offset += ( newdim + (2 * (newdim - 1)) + (newdim - 2));
newdim = dim - (2 * (layer_number-1));
newrow = row - (layer_number - 1);
newcol = col - (layer_number - 1);
offset += getOffset(newrow, newcol, newdim);
printf("%02d ", ((dim * dim) - offset) + 1);
//printf("%02d ", offset);
}
}
} // main gets over here