DilyaraL

Таск 5, задачи 2,3

Nov 10th, 2021 (edited)
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. void qsortRecursive(int* mas, int size) {
  2. //Указатели в начало и в конец массива
  3. int i = 0;
  4. int j = size - 1;
  5.  
  6. //Центральный элемент массива
  7. int mid = mas[size / 2];
  8.  
  9. //Делим массив
  10. do {
  11. //Пробегаем элементы, ищем те, которые нужно перекинуть в другую часть
  12. //В левой части массива пропускаем(оставляем на месте) элементы, которые меньше центрального
  13. while (mas[i] < mid) {
  14. i++;
  15. }
  16. //В правой части пропускаем элементы, которые больше центрального
  17. while (mas[j] > mid) {
  18. j--;
  19. }
  20.  
  21. //Меняем элементы местами
  22. if (i <= j) {
  23. int tmp = mas[i];
  24. mas[i] = mas[j];
  25. mas[j] = tmp;
  26.  
  27. i++;
  28. j--;
  29. }
  30. } while (i <= j);
  31.  
  32.  
  33. //Рекурсивные вызовы, если осталось, что сортировать
  34. if (j > 0) {
  35. //"Левый кусок"
  36. qsortRecursive(mas, j + 1);
  37. }
  38. if (i < size) {
  39. //"Првый кусок"
  40. qsortRecursive(&mas[i], size - i);
  41. }
  42. }
  43.  
  44. void task5_2(int n)
  45. {
  46. int* ar = new int[n];
  47. for (int i = 0; i < n; i++)
  48. {
  49. ar[i] = rand()%100+1;
  50. cout << ar[i] << " ";
  51. }
  52. cout << endl;
  53. qsortRecursive(ar, n);
  54. int s = 0,s1=0;
  55. for (int i = 1; i < n; i++)
  56. {
  57. s = ar[i-1] +s;
  58. s1 = s1 + s;
  59. cout << s << ' ';
  60. //второй ждет только первого; третий ждет и второго и первого
  61. }
  62. cout << endl<<s1;
  63. }
  64.  
  65. void task5_3()
  66. {
  67. int n, S;
  68. cin >> n;
  69. cin >> S;
  70. int* ar = new int[n];
  71. for (int i = 0; i < n; i++)
  72. {
  73. ar[i] = rand() % 10 ;
  74. if (i % 3 == 0)
  75. ar[i] = -ar[i];
  76. }
  77. qsortRecursive(ar, n);
  78. for (size_t i = 0; i < n; i++)
  79. {
  80. cout << ar[i] << " ";
  81. }
  82. cout << endl;
  83.  
  84. int i = 0, j = n - 1, k=0,k1,k2;
  85. while (i < j)
  86. {
  87. if (ar[i] + ar[j] == S)
  88. {
  89. k1 = 1;
  90. k2 = 1;
  91. while ((ar[i] == ar[i + 1])&&(i < j))
  92. {
  93. k1++;
  94. i++;
  95. }
  96. while ((ar[j] == ar[j - 1])&&(i < j))
  97. {
  98. k2++;
  99. j--;
  100. }
  101. k += k1 * k2;
  102. i++;
  103. j--;
  104. }
  105. else
  106. {
  107. if (ar[i] + ar[j] > S)
  108. j--;
  109. else
  110. i++;
  111. }
  112. }
  113. cout << "k= " << k << endl;
  114. }
Add Comment
Please, Sign In to add comment