fork(1) download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void setBasicNumberDivisors(int v_basic_number, int *basic_number_divisors);
  6. void loadNumber(int v_how_many, int *number);
  7. void checkNumber(int *number, int *basic_number_divisors, int *check_number);
  8. void setLargestCommonDivisors(int *number, int *largest_common_divisors, int *basic_number_divisors, int *check_number, int *which_number);
  9. void sortDivisors(int *largest_common_divisors, int how_many, int *number);
  10. void showCommonDivisors(int *largest_common_divisors, int how_many);
  11. void showNumbers(int *number, int how_many);
  12.  
  13. int main()
  14. {
  15. int basic_number{1260};
  16. int basic_number_divisors[36]; // an array storing all off basic_number divisors
  17.  
  18. int *check_number = new int{0};
  19. int *which_number = new int{0};
  20.  
  21. int how_many{0};
  22. cin >> how_many;
  23.  
  24. int *number = new int[how_many];
  25. int *largest_common_divisors = new int[how_many];
  26.  
  27. // determine divisors of 1260 and set them all to variable "all_basic_number_divisors"
  28. setBasicNumberDivisors(basic_number, basic_number_divisors);
  29.  
  30. //load numbers
  31. loadNumber(how_many, number);
  32.  
  33. for (int i = 0; i < how_many; i++)
  34. {
  35. // checks the number of common divisors between the "number" and the "basic_number"
  36. checkNumber(number, basic_number_divisors, check_number);
  37.  
  38. // determine common divisors and set them all to variable "largest_common_divisors"
  39. setLargestCommonDivisors(number, largest_common_divisors, basic_number_divisors, check_number, which_number);
  40.  
  41. number++;
  42. }
  43.  
  44. //sort common divisors
  45. sortDivisors(largest_common_divisors, how_many, number);
  46.  
  47. //show result
  48. showCommonDivisors(largest_common_divisors, how_many);
  49. showNumbers(number, how_many);
  50.  
  51. return 0;
  52. }
  53.  
  54. // determine all divisors of 1260 and set them all to variable "all_basic_number_divisors"
  55. void setBasicNumberDivisors(int v_basic_number, int *basic_number_divisors)
  56. {
  57. for (int i = 1; i <= v_basic_number; i++)
  58. {
  59. if (v_basic_number % i == 0)
  60. {
  61. *basic_number_divisors = i;
  62. basic_number_divisors++;
  63. }
  64. }
  65. }
  66.  
  67. void loadNumber(int v_how_many, int *number)
  68. {
  69. for (int i = 0; i < v_how_many; i++)
  70. {
  71. cin >> *number;
  72. number++;
  73. }
  74. }
  75.  
  76. // checks the number of common divisors between the "number" and the "basic_number"
  77. void checkNumber(int *number, int *basic_number_divisors, int *check_number)
  78. {
  79. for (int i = 0; i < 36; i++)
  80. {
  81. if (*number >= *basic_number_divisors)
  82. {
  83. *check_number = *check_number + 1;
  84. }
  85. else
  86. {
  87. break;
  88. }
  89. basic_number_divisors++;
  90. }
  91. }
  92.  
  93. // determine common divisors and set them all to variable "largest_common_divisors"
  94. void setLargestCommonDivisors(int *number, int *largest_common_divisors, int *basic_number_divisors, int *check_number, int *which_number)
  95. {
  96. largest_common_divisors += *which_number;
  97. for (int i = 0; i < *check_number; i++) // is executed as many times as "number" has common divisors with the "basic_number"
  98. {
  99. if (*number % *basic_number_divisors == 0)
  100. {
  101. *largest_common_divisors = *basic_number_divisors;
  102. }
  103. basic_number_divisors++;
  104. }
  105.  
  106. basic_number_divisors -= *check_number;
  107. *check_number = 0;
  108. *which_number = *which_number + 1;
  109. }
  110.  
  111. void sortDivisors(int *largest_common_divisors, int how_many, int *number)
  112. {
  113. number = number - how_many;
  114. int temp = 0;
  115. int temp_number = 0;
  116. for (int i = 0; i < (how_many); i++)
  117. {
  118. for (int j = 0; j < (how_many - 1); j++)
  119. {
  120. largest_common_divisors = largest_common_divisors + j;
  121. number = number + j;
  122.  
  123. if (*largest_common_divisors < *(largest_common_divisors + 1))
  124. {
  125. // algorithm for sorting tables with the largest common divisors
  126. temp = *largest_common_divisors;
  127. *largest_common_divisors = *(largest_common_divisors + 1);
  128. *(largest_common_divisors + 1) = temp;
  129.  
  130. // algorithm for sorting tables with numbers
  131. temp_number = *number;
  132. *number = *(number + 1);
  133. *(number + 1) = temp_number;
  134. }
  135.  
  136.  
  137. // ----- THE CODE BELOW DOES NOT WORK -----
  138. // if the divisors have the same value next to each other, the algoritm sorts the corresponding numbers in ascending order
  139. else if (*largest_common_divisors == *(largest_common_divisors + 1 ))
  140. {
  141. if (*number > (*number + 1))
  142. {
  143. temp_number = *number;
  144. *number = *(number + 1);
  145. *(number + 1) = temp_number;
  146. }
  147. }
  148. // ----- THE CODE ABOVE DOES NOT WORK -----
  149.  
  150.  
  151. largest_common_divisors = largest_common_divisors - j;
  152. number = number - j;
  153. }
  154. }
  155. }
  156.  
  157. void showCommonDivisors(int *largest_common_divisors, int how_many)
  158. {
  159. cout << endl
  160. << "Common Divisors:" << endl;
  161.  
  162. for (int i = 0; i < how_many; i++)
  163. {
  164.  
  165. cout << *largest_common_divisors << " ";
  166. largest_common_divisors++;
  167. }
  168.  
  169. cout << endl;
  170. }
  171.  
  172. void showNumbers(int *number, int how_many)
  173. {
  174. cout << endl
  175. << "Numbers:" << endl;
  176.  
  177. number = number - how_many;
  178. for (int i = 0; i < how_many; i++)
  179. {
  180. cout << *number << " ";
  181. number++;
  182. }
  183. cout << endl;
  184. }
Success #stdin #stdout 0s 4516KB
stdin
10
2 60 101 99 305 85 25 65 5 55
stdout
Common Divisors:
60 9 5 5 5 5 5 5 2 1 

Numbers:
60 99 305 85 25 65 5 55 2 101