Программа которая сортирует массив по убыванию суммы цифр числа

Дан одномерный массив, состоящий из натуральных чисел. Выполнить сортировку данного массива по возрастанию суммы цифр чисел. Например, дан массив чисел [14, 30, 103]. После сортировки он будет таким: [30, 103, 14], так как сумма цифр числа 30 составляет 3, числа 103 равна 4, числа 14 равна 5.

Вывести на экран исходный массив, отсортированный массив, а также для контроля сумму цифр каждого числа отсортированного массива.

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

Для подсчета суммы цифр числа напишем функцию, которая будет принимать число, а возвращать сумму его цифр. Данная функция будет вызываться в условном операторе дважды (для очередного и следующего за ним числа).

Алгоритм подсчета суммы цифр числа с использованием цикла «пока» описан здесь.

Поскольку кроме прочего требуется вывести суммы цифр чисел отсортированного массива, то после вывода массива он еще раз перебирается в цикле, и для каждого элемента вызывается функция.

Сортировка по убыванию или возрастанию в Excel

Pascal

const
N = 10;
var
arr: array[1..N] of integer;
i, j: byte;
a: integer;
function sum (n: integer): byte;
begin
sum := 0;
while n > 0 do begin
sum := sum + n mod 10;
n := n div 10;
end;
end;
begin
randomize;
for i := 1 to N do begin
arr[i] := random(20)+10;
write (arr[i]:3);
end;
writeln;

for i := 1 to N-1 do // количество проходов по массиву
for j := 1 to N-i do // количество сравнений в каждом проходе
if sum(arr[j]) > sum(arr[j+1]) then begin
a := arr[j];
arr[j] := arr[j+1];
arr[j+1] := a;
end;

Читайте также:
Невозможно продолжить программу установки из-за ошибки

for i := 1 to N do
write(arr[i]:3);
writeln;
for i := 1 to N do
write(sum(arr[i]):3);
writeln;
end.

16 16 22 26 21 26 15 12 10 14
10 21 12 22 14 15 16 16 26 26
1 3 3 4 5 6 7 7 8 8

Язык Си

#include < stdio.h>
#define N 10
int summ (int);
main() int a[N], i, j, b;
srand(time(NULL));
for (i=0; i < N; i++) a[i] = rand()%100;
printf(«%3d», a[i]);
>
printf(«n»);

for (i=0; i < N-1; i++) for (j=0; j < N-i-1; j++) if (summ(a[j]) > summ(a[j+1])) b = a[j];
a[j] = a[j+1];
a[j+1] = b;
>
>
>

for (i=0; i < N; i++)
printf(«%3d», a[i]);
printf(«n»);
for (i=0; i < N; i++)
printf(«%3d», summ(a[i]));
printf(«n»);
>

int summ (int n) int s = 0;
while (n > 0) s += n%10;
n = n/10;
>
return s;
>

87 25 77 77 61 25 13 26 54 79
13 25 61 25 26 54 77 77 87 79

Язык C++ с нуля | #32 Сортировка массива в c++


4 7 7 7 8 9 14 14 15 16

Python

def summ (m):
s = 0
while m > 0:
s += m%10
m = m//10
return s

from random import random
N = 10
a = [0]*N
for i in range(N):
a[i] = int(random()*40) + 10
print(‘%4d’ % a[i], end=»)
print()

for i in range(N-1): # количество переборов 9
for j in range(N-i-1): # при первом переборе i=0
if summ(a[j]) > summ(a[j+1]):
a[j], a[j+1] = a[j+1], a[j]

for i in range(N):
print(‘%4d’ % a[i], end=»)
print()

for i in range(N):
print(‘%4d’ % summ(a[i]), end=»)
print()

21 25 17 28 24 16 11 23 31 30
11 21 30 31 23 24 25 16 17 28
2 3 3 4 5 6 7 7 8 10

КуМир

алг сортировка пузырьком
нач
цел N = 10
цел таб arr[1:N]
цел i,j,k
нц для i от 1 до N
arr[i] := int(rand(0,100))
вывод arr[i]:3
кц
вывод нс
нц для i от 1 до N-1
нц для j от 1 до N-i
если summ(arr[j]) > summ(arr[j+1]) то
k := arr[j]
arr[j] := arr[j+1]
arr[j+1] := k
все
кц
кц

Читайте также:
При запуске Симс 4 пишет запуск программы невозможен

нц для i от 1 до N
вывод arr[i]:3
кц
вывод нс
нц для i от 1 до N
вывод summ(arr[i]):3
кц
кон

алг цел summ(цел n)
нач
цел m
знач := 0
m := n
нц пока m > 0
знач := знач + mod(m,10)
m := div(m,10)
кц
кон

59 82 6 40 87 10 88 17 7 89
10 40 6 7 17 82 59 87 88 89
1 4 6 7 8 10 14 15 16 17

Источник: gospodaretsva.com

Сортировка по сумме цифр

Напишите программу, которая сортирует натуральные числа в массиве по убыванию суммы цифр десятичной записи числа. При равенстве сумм цифр числа должны сохранить исходный порядок. Входные данные Первая строка содержит размер массива N. Во второй строке через пробел задаются N чисел — элементы массива. Гарантируется, что 0
#include #include #include using namespace std; bool cmp(int x, int y) < return x % 10 + x / 10 < y % 10 + y / 10; >int main() < int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) cin >> a[i]; sort(a.rbegin(), a.rend(), cmp); for (int i = 0; i

Отслеживать

215k 15 15 золотых знаков 117 117 серебряных знаков 228 228 бронзовых знаков

Источник: ru.stackoverflow.com

Уроки 92 — 94
Сортировка массивов
§64. Сортировка

1. Отсортировать массив и найти количество различных чисел в нём.

2. Напишите программу, в которой сортировка выполняется «методом камня» — самый «тяжёлый» элемент опускается в конец массива.

3. Напишите вариант метода пузырька, который заканчивает работу, если на очередном шаге внешнего цикла не было перестановок.

4. Напишите программу, которая сортирует массив по возрастанию последней цифры числа.

5. Напишите программу, которая сортирует массив по убыванию суммы цифр числа.

6. Напишите программу, которая сортирует первую половину массива по возрастанию, а вторую — по убыванию (элементы из первой половины не должны попадать во вторую и наоборот).

Читайте также:
Все программы про машины

7. Напишите программу, которая сортирует массив, а затем находит максимальное из чисел, встречающихся в массиве несколько раз.

*8. Напишите программу, которая сравнивает количество перестановок при сортировке одного и того же массива разными методами. Проведите эксперименты для возрастающей последовательности (уже отсортированной), убывающей (отсортированной в обратном порядке) и случайной.

Следующая страница §64. Сортировка

Cкачать материалы урока

Источник: xn—-7sbbfb7a7aej.xn--p1ai

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru