Напишите программу на языке C++, которая упорядочивает натуральные числа в массиве в порядке убывания суммы цифр. Если

  • 65
Напишите программу на языке C++, которая упорядочивает натуральные числа в массиве в порядке убывания суммы цифр. Если сумма цифр числа равна, то нужно сохранить исходный порядок чисел. Входные данные включают размер массива N и N чисел, разделенных пробелом. Гарантируется, что N больше 0. Программа должна вывести элементы массива, отсортированные в порядке убывания суммы цифр, разделенные пробелом. Пример ввода: 6 9 21 32 55 81 11 Пример вывода: 55 9 81 32
Забытый_Замок
20
Хорошо! Чтобы решить эту задачу, мы можем использовать алгоритм сортировки массива в порядке убывания суммы цифр чисел.

Вот пошаговое решение на языке C++:

cpp
#include
#include
#include

// Функция для вычисления суммы цифр числа
int sumOfDigits(int number) {
int sum = 0;
while (number != 0) {
sum += number % 10;
number /= 10;
}
return sum;
}

// Функция для упорядочивания массива в порядке убывания суммы цифр
bool compare(int a, int b) {
if (sumOfDigits(a) == sumOfDigits(b)) {
return true;
} else {
return sumOfDigits(a) > sumOfDigits(b);
}
}

int main() {
int N;
std::cin >> N;
std::vector numbers(N);

// Ввод массива чисел
for (int i = 0; i < N; i++) {
std::cin >> numbers[i];
}

// Сортировка массива с использованием функции compare
std::sort(numbers.begin(), numbers.end(), compare);

// Вывод отсортированного массива
for (int i = 0; i < N; i++) {
std::cout << numbers[i] << " ";
}

return 0;
}


Позвольте мне объяснить каждую часть программы:

1. В начале программы мы подключаем необходимые заголовочные файлы: `iostream` для ввода-вывода, `vector` для работы с динамическим массивом и `algorithm` для использования функции сортировки.

2. Затем у нас есть функция `sumOfDigits`, которая вычисляет сумму цифр числа. Она используется внутри функции `compare` для сравнения чисел.

3. Функция `compare` сравнивает два числа по сумме их цифр. Если сумма цифр чисел равна, то функция возвращает истину, чтобы сохранить исходный порядок чисел. В противном случае, функция возвращает значение сравнения суммы цифр чисел.

4. В функции `main` мы сначала считываем размер массива `N` с помощью оператора `cin`. Затем создаем вектор `numbers` размером `N`, в котором будем хранить введенные числа.

5. Затем с помощью цикла `for` мы заполняем вектор числами, вводимыми с клавиатуры.

6. После этого мы сортируем вектор `numbers` с использованием функции `sort` из библиотеки `algorithm`. В качестве аргументов передаем итераторы `begin()` и `end()` для указания интервала сортировки, а также функцию `compare`.

7. Наконец, мы выводим отсортированный массив на экран.

Таким образом, в результате выполнения программы мы получим отсортированный массив чисел в порядке убывания суммы их цифр.

Пожалуйста, обратите внимание на то, что это пример программы, решающей данную задачу. Возможно, существуют и другие способы решения этой задачи.