Задача - Отсортировать массив по возрастанию суммы цифр - программирование на разных языках

Задача — Отсортировать массив по возрастанию суммы цифр — программирование на разных языках

Задачи по программированию с решением для школьников
Want create site? Find Free WordPress Themes and plugins.

Задача — Отсортировать массив по возрастанию суммы цифр
— программирование на Pascal, Си, Кумир, Basic-256, Python

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

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

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

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

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

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

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
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

Did you find apk for android? You can find new Free Android Games and apps.

Добавить комментарий