fork download
  1. #include <stdio.h>
  2. #include <memory.h>
  3. #include <malloc.h>
  4.  
  5. void buildSnailReverse(int* a, int w, int h)
  6. {
  7. int s=w*h,n=0,d=h>w,r=2*d+1,v[4]={1,w,-1,-w},m=(d?w:h)-1;
  8. a+=m/2*(w+1);
  9. for(w=(d?h:w)-m;n<s;a+=v[d])*a=++n,n>w&&!a[v[h=d+r&3]]?d=h:0;
  10. }
  11.  
  12. void printArray(int* a, int w, int h)
  13. {
  14. int i, j;
  15. for (i = 0; i < h; ++i) {
  16. for (j = 0; j < w; ++j) {
  17. printf("%2d ", a[i * w + j]);
  18. }
  19. printf("\n");
  20. }
  21. printf("\n");
  22. }
  23.  
  24. void makeAndPrintSnail(int w, int h)
  25. {
  26. int *a;
  27. a = (int*)calloc(w * h, sizeof(int));
  28. buildSnailReverse(a, w, h);
  29. printArray(a, w, h);
  30. free(a);
  31. }
  32.  
  33. int main()
  34. {
  35. makeAndPrintSnail(4,4);
  36. makeAndPrintSnail(5,5);
  37. makeAndPrintSnail(6,6);
  38.  
  39. makeAndPrintSnail(3,10);
  40. makeAndPrintSnail(4,10);
  41. makeAndPrintSnail(5,10);
  42. makeAndPrintSnail(6,10);
  43. makeAndPrintSnail(7,10);
  44. makeAndPrintSnail(8,10);
  45. makeAndPrintSnail(9,10);
  46.  
  47. makeAndPrintSnail(3,11);
  48. makeAndPrintSnail(4,11);
  49.  
  50. makeAndPrintSnail(10,3);
  51. makeAndPrintSnail(10,4);
  52. makeAndPrintSnail(10,5);
  53. makeAndPrintSnail(10,6);
  54. makeAndPrintSnail(10,7);
  55. makeAndPrintSnail(10,8);
  56. makeAndPrintSnail(10,9);
  57.  
  58. makeAndPrintSnail(11,3);
  59. makeAndPrintSnail(11,4);
  60. return 0;
  61. }
Success #stdin #stdout 0s 1964KB
stdin
Standard input is empty
stdout
 7  8  9 10 
 6  1  2 11 
 5  4  3 12 
16 15 14 13 

21 22 23 24 25 
20  7  8  9 10 
19  6  1  2 11 
18  5  4  3 12 
17 16 15 14 13 

21 22 23 24 25 26 
20  7  8  9 10 27 
19  6  1  2 11 28 
18  5  4  3 12 29 
17 16 15 14 13 30 
36 35 34 33 32 31 

21 20 19 
22  1 18 
23  2 17 
24  3 16 
25  4 15 
26  5 14 
27  6 13 
28  7 12 
29  8 11 
30  9 10 

19 18 17 40 
20  1 16 39 
21  2 15 38 
22  3 14 37 
23  4 13 36 
24  5 12 35 
25  6 11 34 
26  7 10 33 
27  8  9 32 
28 29 30 31 

41 40 39 38 37 
42 17 16 15 36 
43 18  1 14 35 
44 19  2 13 34 
45 20  3 12 33 
46 21  4 11 32 
47 22  5 10 31 
48 23  6  9 30 
49 24  7  8 29 
50 25 26 27 28 

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

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

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

81 80 79 78 77 76 75 74 73 
82 49 48 47 46 45 44 43 72 
83 50 25 24 23 22 21 42 71 
84 51 26  9  8  7 20 41 70 
85 52 27 10  1  6 19 40 69 
86 53 28 11  2  5 18 39 68 
87 54 29 12  3  4 17 38 67 
88 55 30 13 14 15 16 37 66 
89 56 31 32 33 34 35 36 65 
90 57 58 59 60 61 62 63 64 

23 22 21 
24  1 20 
25  2 19 
26  3 18 
27  4 17 
28  5 16 
29  6 15 
30  7 14 
31  8 13 
32  9 12 
33 10 11 

21 20 19 44 
22  1 18 43 
23  2 17 42 
24  3 16 41 
25  4 15 40 
26  5 14 39 
27  6 13 38 
28  7 12 37 
29  8 11 36 
30  9 10 35 
31 32 33 34 

21 22 23 24 25 26 27 28 29 30 
20  1  2  3  4  5  6  7  8  9 
19 18 17 16 15 14 13 12 11 10 

19 20 21 22 23 24 25 26 27 28 
18  1  2  3  4  5  6  7  8 29 
17 16 15 14 13 12 11 10  9 30 
40 39 38 37 36 35 34 33 32 31 

41 42 43 44 45 46 47 48 49 50 
40 17 18 19 20 21 22 23 24 25 
39 16  1  2  3  4  5  6  7 26 
38 15 14 13 12 11 10  9  8 27 
37 36 35 34 33 32 31 30 29 28 

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

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

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

81 82 83 84 85 86 87 88 89 90 
80 49 50 51 52 53 54 55 56 57 
79 48 25 26 27 28 29 30 31 58 
78 47 24  9 10 11 12 13 32 59 
77 46 23  8  1  2  3 14 33 60 
76 45 22  7  6  5  4 15 34 61 
75 44 21 20 19 18 17 16 35 62 
74 43 42 41 40 39 38 37 36 63 
73 72 71 70 69 68 67 66 65 64 

23 24 25 26 27 28 29 30 31 32 33 
22  1  2  3  4  5  6  7  8  9 10 
21 20 19 18 17 16 15 14 13 12 11 

21 22 23 24 25 26 27 28 29 30 31 
20  1  2  3  4  5  6  7  8  9 32 
19 18 17 16 15 14 13 12 11 10 33 
44 43 42 41 40 39 38 37 36 35 34