Дан одномерный массив, состоящий из натуральных чисел. Выполнить сортировку данного массива по возрастанию суммы цифр чисел. Например, дан массив чисел [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
все
кц
кц
нц для 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