Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. // Вариант-8, лаба N 6
  2. // Даниелян Самвел
  3.  
  4. // Ввести последовательность натуральных чисел {Aj}j=1...n (n<=1000).
  5. // Упорядочить последовательность по неубыванию суммы цифр числа, числа с
  6. // одинаковыми суммами цифр дополнительно упорядочить по неубыванию наименьшей цифры числа,
  7. // числа с одинаковыми суммами цифр и одинаковыми наименьшими цифрами дополнительно упорядочить по неубыванию самого числа.
  8.  
  9. #include <iostream>
  10.  
  11. using namespace std;
  12.  
  13. void divide(int &i, int &sum, int &min) {
  14. while (i > 0) {
  15. sum += i % 10;
  16. if (min > i % 10) {
  17. min = i % 10;
  18. }
  19. i /= 10;
  20. }
  21. }
  22.  
  23. int main()
  24. {
  25. int arr[1000];
  26. int size = 0, sum1 = 0, sum2 = 0, i = 0;
  27.  
  28. cout << "Enter the size: ";
  29. cin >> size;
  30.  
  31. for (int i = 0; i < size; i++) {
  32. cin >> arr[i];
  33. }
  34.  
  35. for (i; i < size - 1;) {
  36. int copyI = arr[i];
  37. int min1 = copyI % 10;
  38.  
  39. divide(copyI, sum1, min1);
  40.  
  41. for (int j = i + 1; j < size; j++) {
  42. int copyJ = arr[j];
  43. int min2 = copyJ % 10;
  44.  
  45. divide(copyJ, sum2, min2);
  46.  
  47. if (sum1 > sum2 || (sum1 == sum2 && min1 > min2) || (sum1 == sum2 && min1 == min2) && arr[i] > arr[j]) {
  48. swap(arr[i], arr[j]);
  49. sum2 = 0;
  50. break;
  51. }
  52. else if (j > size - 2 && (sum2 > sum1 || sum2 == sum1)) {
  53. i++;
  54. }
  55.  
  56. sum2 = 0;
  57. }
  58. sum1 = 0;
  59. }
  60.  
  61. for (int i = 0; i < size; i++) {
  62. cout << arr[i] << '\t';
  63. }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement