C/C++

Дано не менее 3-х различных натуральных чисел, за которыми следует 0. Определить 3 наибольших числа в последовательности

Эта задача может быть решена следующим образом:

1. Создайте список, в который будут добавляться все числа перед нулем.
2. Создайте список, в который будут добавляться наибольшие три числа из первого списка. Изначально этот список пуст.
3. Пройдитесь циклом по первому списку чисел. Если встречается 0, прервите цикл. Если не 0, добавьте число в первый список.
4. Отсортируйте первый список в порядке убывания.
5. Пройдитесь циклом по первому списку и добавьте первые три числа во второй список.
6. Выведите второй список на экран.

Вот код, который решает эту задачу:

numbers = [] # первый список
top_three = [] # второй список

# заполнение первого списка
while True:
num = int(input("Введите число (введите 0, чтобы закончить ввод): "))
if num == 0:
break
numbers.append(num)

# сортировка первого списка
numbers.sort(reverse=True)

# выбор трех наибольших чисел из первого списка
for i in range(3):
if len(numbers) > i:
top_three.append(numbers[i])

# вывод результата
print("Три наибольших числа: ", top_three)


Пример вывода на экран:

Введите число (введите 0, чтобы закончить ввод): 10
Введите число (введите 0, чтобы закончить ввод): 20
Введите число (введите 0, чтобы закончить ввод): 30
Введите число (введите 0, чтобы закончить ввод): 5
Введите число (введите 0, чтобы закончить ввод): 7
Введите число (введите 0, чтобы закончить ввод): 0
Три наибольших числа: [30, 20, 10]
АШ
Акылбек Шокашев
313
Лучший ответ
Это что, ChatGPT писал? Ну и нагородил...

#include <iostream>
int main(){
int m=0,a=m,b=m,c=m,k; while(std::cin>>k,k)
if(k>a)c=b,b=a,a=k; else if(k>b)c=b,b=k; else if(k>c)c=k;
std::cout<<a<<' '<<b<<' '<<c<<'\n';}
Igor O Munter while(cin>>k,k) не могу понять как это работает
Дмитрий Докторов P.S. "Запятая, она, делает, написанное, лучше." ;)
(Д.Киз, "Цветы для Элджернона")

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