fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void loadNumbers(int v_how_many, int *numbers);
  6. void setLargestCommonDivisors(int v_how_many, int *numbers, int *largest_common_divisors, int *basic_number_divisors);
  7. void sortDivisors(int *largest_common_divisors, int how_many, int *numbers);
  8. void showNumbers(int *numbers, int v_how_many);
  9.  
  10. int main()
  11. {
  12. int basic_number_divisors[36] = {1, 2, 3, 4, 5, 6, 7, 9, 10, 12, 14, 15, 18, 20, 21, 28, 30, 35, 36, 42, 45, 60, 63, 70, 84, 90, 105, 126, 140, 180, 210, 252, 315, 420, 630, 1260};
  13. int how_many{0};
  14.  
  15. cin >> how_many;
  16.  
  17. int *numbers = new int[how_many];
  18. int *largest_common_divisors = new int[how_many];
  19.  
  20.  
  21. loadNumbers(how_many, numbers);
  22. setLargestCommonDivisors(how_many, numbers, largest_common_divisors, basic_number_divisors);
  23. sortDivisors(largest_common_divisors, how_many, numbers);
  24. delete [] largest_common_divisors;
  25.  
  26. showNumbers(numbers, how_many);
  27. delete [] numbers;
  28.  
  29.  
  30. return 0;
  31. }
  32.  
  33. void loadNumbers(int v_how_many, int *numbers)
  34. {
  35. for (int i = 0; i < v_how_many; i++)
  36. {
  37. cin >> *numbers;
  38. numbers++;
  39. }
  40. }
  41.  
  42. void setLargestCommonDivisors(int v_how_many, int *numbers, int *largest_common_divisors, int *basic_number_divisors)
  43. {
  44. int counter{0};
  45.  
  46. for (int i = 0; i < v_how_many; i++)
  47. {
  48. counter=0;
  49.  
  50. for (int j = 1; j <= 36; j++)
  51. {
  52. if (*numbers == *basic_number_divisors)
  53. {
  54. *largest_common_divisors = *basic_number_divisors;
  55. break;
  56. }
  57. else if (*numbers < *basic_number_divisors)
  58. {
  59. break;
  60. }
  61. else if (*numbers % *basic_number_divisors == 0)
  62. {
  63. *largest_common_divisors = *basic_number_divisors;
  64. }
  65.  
  66. basic_number_divisors++;
  67. counter++;
  68. }
  69.  
  70. basic_number_divisors-=counter;
  71. numbers++;
  72. largest_common_divisors++;
  73. }
  74. }
  75.  
  76. void sortDivisors(int *largest_common_divisors, int how_many, int *numbers)
  77. {
  78. int temp{0};
  79. int temp_number{0};
  80.  
  81. for (int i = 1; i <= (how_many); i++)
  82. {
  83. for (int j = 1; j <= (how_many - 1); j++)
  84. {
  85. largest_common_divisors = largest_common_divisors + j;
  86. numbers = numbers + j;
  87.  
  88. if (*(largest_common_divisors - 1) < *largest_common_divisors)
  89. {
  90. temp = *(largest_common_divisors - 1);
  91. *(largest_common_divisors - 1) = *largest_common_divisors;
  92. *largest_common_divisors = temp;
  93.  
  94. temp_number = *(numbers - 1);
  95. *(numbers - 1) = *numbers;
  96. *numbers = temp_number;
  97. }
  98.  
  99. else if (*(largest_common_divisors - 1) == *largest_common_divisors)
  100. {
  101. if (*(numbers - 1) > *numbers)
  102. {
  103. temp_number = *(numbers - 1);
  104. *(numbers - 1) = *numbers;
  105. *numbers = temp_number;
  106. }
  107. }
  108.  
  109. largest_common_divisors = largest_common_divisors - j;
  110. numbers = numbers - j;
  111. }
  112. }
  113. }
  114.  
  115. void showNumbers(int *numbers, int v_how_many)
  116. {
  117. for (int i = 0; i < v_how_many; i++)
  118. {
  119. cout << *numbers << " ";
  120. numbers++;
  121. }
  122. }
Success #stdin #stdout 0s 4540KB
stdin
10
2 60 101 99 305 85 25 65 5 55
stdout
60 99 5 25 55 65 85 305 2 101