Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Вариант-8, лаба N 6
- // Даниелян Самвел
- // Ввести последовательность натуральных чисел {Aj}j=1...n (n<=1000).
- // Упорядочить последовательность по неубыванию суммы цифр числа, числа с
- // одинаковыми суммами цифр дополнительно упорядочить по неубыванию наименьшей цифры числа,
- // числа с одинаковыми суммами цифр и одинаковыми наименьшими цифрами дополнительно упорядочить по неубыванию самого числа.
- #include <iostream>
- using namespace std;
- void divide(int &i, int &sum, int &min) {
- while (i > 0) {
- sum += i % 10;
- if (min > i % 10) {
- min = i % 10;
- }
- i /= 10;
- }
- }
- int main()
- {
- int arr[1000];
- int size = 0, sum1 = 0, sum2 = 0, i = 0;
- cout << "Enter the size: ";
- cin >> size;
- for (int i = 0; i < size; i++) {
- cin >> arr[i];
- }
- for (i; i < size - 1;) {
- int copyI = arr[i];
- int min1 = copyI % 10;
- divide(copyI, sum1, min1);
- for (int j = i + 1; j < size; j++) {
- int copyJ = arr[j];
- int min2 = copyJ % 10;
- divide(copyJ, sum2, min2);
- if (sum1 > sum2 || (sum1 == sum2 && min1 > min2) || (sum1 == sum2 && min1 == min2) && arr[i] > arr[j]) {
- swap(arr[i], arr[j]);
- sum2 = 0;
- break;
- }
- else if (j > size - 2 && (sum2 > sum1 || sum2 == sum1)) {
- i++;
- }
- sum2 = 0;
- }
- sum1 = 0;
- }
- for (int i = 0; i < size; i++) {
- cout << arr[i] << '\t';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement