Вопрос задан 21.06.2023 в 17:41. Предмет Информатика. Спрашивает Хасанов Руслан.

Только на С++!! Сортировка по сумме цифр Напишите программу, которая сортирует натуральные числа

в массиве по убыванию суммы цифр десятичной записи числа. При равенстве сумм цифр числа должны сохранить исходный порядок. Входные данные Первая строка содержит размер массива N. Во второй строке через пробел задаются N чисел — элементы массива. Гарантируется, что 0 Выходные данные Программа должна вывести в одной строке элементы массива, отсортированного в порядке убывания суммы цифр десятичной записи числа, разделив их пробелами. Примеры Ввод Вывод 6 9 21 32 55 81 11
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Молитвик Павел.

#include <iostream>

using namespace std;

unsigned DigitSum( unsigned x ) {

   unsigned sum = 0;

   while ( x != 0 ) {

       sum += x % 10;

       x /= 10;

   }

   return sum;

}

bool Comparison( const unsigned a, const unsigned b ) {

   return DigitSum( a ) < DigitSum( b );

}

// третий параметр указатель на функцию сравнения для сортировки

void InsertionSort( unsigned long *arr, size_t size, bool (*compareFunc)( const unsigned, const unsigned ) ) {

   for ( size_t i = 1; i < size; ++i )

       for ( size_t j = i; j > 0 && Comparison( arr[ j - 1 ], arr[ j ] ); --j )

           swap( arr[ j - 1 ], arr[ j ] );

}

int main() {

   const size_t maxCount = 10000;

   unsigned long* arr = new unsigned long[ maxCount ];

   size_t count = 0;

   cin >> count;

   for ( size_t i = 0; i < count; ++i ) {

       cin >> arr[ i ];

   }

   // сортируем массив, указывая какая функция для сравнения элементов используется

   InsertionSort( arr, count, Comparison );

   for ( size_t i = 0; i < count; ++i )

       cout << arr[ i ] << " ";

   delete[] arr;

   return 0;

}

дайте 5 звёзд позязя

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
cpp
#include <iostream> #include <vector> #include <algorithm> // Функция для подсчёта суммы цифр числа int sumOfDigits(int number) { int sum = 0; while (number > 0) { sum += number % 10; number /= 10; } return sum; } // Функция для сравнения сумм цифр двух чисел bool compareSumOfDigits(int a, int b) { if (sumOfDigits(a) == sumOfDigits(b)) { return a < b; } return sumOfDigits(a) > sumOfDigits(b); } int main() { int N; std::cin >> N; std::vector<int> numbers(N); for (int i = 0; i < N; ++i) { std::cin >> numbers[i]; } // Сортировка с использованием функции сравнения std::sort(numbers.begin(), numbers.end(), compareSumOfDigits); // Вывод отсортированных элементов for (int i = 0; i < N; ++i) { std::cout << numbers[i] << " "; } std::cout << std::endl; return 0; }

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

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос