fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define ARRSIZE 20
  4. #define SQSIZE 51 // Любое нечётное число подойдёт
  5.  
  6. void transfer_coordinates(int abscissa[], int ordinate[]);
  7. void double_bubble_sort(int arr_1[], int arr_2[], int order[]);
  8. void print_field(int abscissa[], int ordinate[], int order[]);
  9. void initialize_order_array(int order[]);
  10.  
  11. int main()
  12. {
  13. double spiral_coefficient = 1.2; // r = k*(theta) 1.2
  14.  
  15. double spiral_theta = 0;
  16. double polar_radius;
  17.  
  18. int abscissa[ARRSIZE];
  19. int ordinate[ARRSIZE];
  20.  
  21. int order[ARRSIZE];
  22. initialize_order_array(order);
  23.  
  24. int i;
  25.  
  26. for (i = 0; i < ARRSIZE; i++, spiral_theta += 1) {
  27. polar_radius = spiral_coefficient * spiral_theta;
  28. abscissa[i] = (int) round(polar_radius * cos(spiral_theta));
  29. ordinate[i] = (int) round(polar_radius * sin(spiral_theta));
  30. }
  31.  
  32. print_field(abscissa, ordinate, order);
  33. return 0;
  34. }
  35.  
  36. void double_bubble_sort(int arr_1[], int arr_2[], int order[])
  37. {
  38. int i, j, dump;
  39.  
  40. for (i = 0; i < ARRSIZE; i++) {
  41. for (j = 0; j < ARRSIZE - 1; j++) {
  42. if (arr_2[j + 1] < arr_2[j]) {
  43. dump = arr_1[j + 1], arr_1[j + 1] = arr_1[j], arr_1[j] = dump;
  44. dump = arr_2[j + 1], arr_2[j + 1] = arr_2[j], arr_2[j] = dump;
  45. dump = order[j + 1], order[j + 1] = order[j], order[j] = dump;
  46. }
  47. }
  48. }
  49.  
  50. for (i = 0; i < ARRSIZE - 1; i++) {
  51. if (arr_2[i + 1] == arr_2[i] && arr_1[i + 1] < arr_1[i]) {
  52. dump = arr_1[i + 1], arr_1[i + 1] = arr_1[i], arr_1[i] = dump;
  53. dump = order[i + 1], order[i + 1] = order[i], order[i] = dump;
  54. }
  55. }
  56. }
  57. void print_field(int abscissa[], int ordinate[], int order[])
  58. {
  59. transfer_coordinates(abscissa, ordinate);
  60. double_bubble_sort(abscissa, ordinate, order);
  61.  
  62. int x, y, i;
  63. int half = (SQSIZE - 1) / 2;
  64.  
  65. for (i = y = 0; y < SQSIZE; y++) {
  66. for (x = 0; x < SQSIZE; x++) {
  67. if (y == ordinate[i] && x == abscissa[i] && i < ARRSIZE) {
  68. printf(order[i] < 10 ? "%d " : "%d", order[i]);
  69. i++;
  70. } else if (x == half || y == half) {
  71. printf("x ");
  72. } else {
  73. printf(" ");
  74. }
  75. }
  76. printf("\n");
  77. }
  78. }
  79.  
  80. void transfer_coordinates(int abscissa[], int ordinate[])
  81. {
  82. int half = (SQSIZE - 1) / 2;
  83. int i;
  84. for (i = 0; i < ARRSIZE; i++) {
  85. abscissa[i] += half;
  86. ordinate[i] = half - ordinate[i];
  87. }
  88. }
  89.  
  90. void initialize_order_array(int order[])
  91. {
  92. int i;
  93. for (i = 0; i < ARRSIZE; i++) {
  94. order[i] = i;
  95. }
  96. }
  97.  
Success #stdin #stdout 0s 4460KB
stdin
Standard input is empty
stdout
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x   14                                              
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                      15                          x                                                   
                                                  x                                                   
                                                  x                                                   
                                                8 x                                                   
                                                  x                                                   
                                                  x                           13                      
                                                  x           7                                       
                                                  x                                                   
                              9                   x                                                   
                                                  x                                             19    
                                                2 x                                                   
                                          3       x 1                                                 
x x x x x x x x x x x x x x x x x x x x x x x x x 0 x x x x x x x x x x x x x x x x x x x x x x x x x 
                                                  x                                                   
                                                  x             6                                     
                                                  x                                                   
                                            4     x                                                   
                                                  x                                                   
              16                                  x   5                                               
                              10                  x                                                   
                                                  x                       12                          
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  11                                                  
                                                  x                                                   
                                                  x                                                   
                                                  x                           18                      
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                      17          x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x                                                   
                                                  x