Вопрос Помогите пожалуйста составить программу на языке python. заранее спасибо!

Регистрация
21 Дек 2013
Сообщения
78
Репутация
0
Спасибо
0
Монет
0
Напишите программу, которая сортирует массив по убыванию суммы цифр числа.

Используйте функцию, которая определяет сумму цифр числа.
 
def digit_sum(n):
return sum(int(digit) for digit in str(n))

def selection_sort_descending_by_digit_sum(arr):
n = len(arr)
for i in range(n):
max_idx = i
for j in range(i+1, n):
if digit_sum(arr[j]) > digit_sum(arr[max_idx]):
max_idx = j
arr, arr[max_idx] = arr[max_idx], arr

arr = [123, 456, 789, 12, 34, 56, 78, 90]
selection_sort_descending_by_digit_sum(arr)
print(arr) # [789, 456, 123, 90, 78, 56, 34, 12] Принимай работу :D
 
print(*sorted(input().split(), key = lambda x: sum(map(int, x)), reverse = True))
 
def sum_digits(n):
"""Функция для определения суммы цифр числа"""
s = 0
while n:
s += n % 10
n //= 10
return s

def sort_by_sum(arr):
"""Функция для сортировки массива по убыванию суммы цифр числа"""
n = len(arr)
for i in range(n):
for j in range(n-1-i):
if sum_digits(arr[j]) < sum_digits(arr[j+1]):
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr

# Пример использования
arr = [123, 456, 789, 101112, 13141516]
print("Исходный массив: ", arr)
arr_sorted = sort_by_sum(arr)
print("Массив после сортировки по убыванию суммы цифр числа: ", arr_sorted)




В этом примере сначала определяется функция sum_digits, которая принимает целое число n и возвращает сумму его цифр. Затем определяется функция sort_by_sum, которая принимает массив чисел arr и сортирует его по убыванию суммы цифр каждого числа. Для сортировки используется алгоритм сортировки пузырьком.

Пример использования программы показывает, как можно вызвать функцию sort_by_sum и отсортировать исходный массив чисел. Результат сортировки выводится на экран.
 
Gpt первые восемь строк очень даже хорошо сказал. А у меня возник вопрос в листах есть метод сорт. У него есть две скобочки. А если внутрь этих скобочек написать ту функцию которую вы написали, то что будет?
 
Держи сортировку по сумме цифр с отдельной функцией, даже с двумя. Две по цене одной. def digititer(n):
while n != 0: yield n % 10; n //= 10

def digitsum(n): return sum(digititer(n))

arr = map(int, input("Введите элементы массива через пробел: ").split())
print(*sorted(arr, key = digitsum, reverse = True)) Пример: Введите элементы массива через пробел: 1012 873 2048 15
873 2048 15 1012
 
Назад
Сверху