Предмет: Информатика, автор: ivanbaranov563

Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [100; 200] и находит в нём пару соседних элементов, сумма которых минимальна. На Python очень надо срочно!!!


nazikmuz: На С++ бы сделал,Python не учил
mathgenius: Вот вам пока упрощенный вариант, надо подумать как сделать оптимальный рандомный список c возможным попаданием целых чисел (c большой вероятностью).
mathgenius: from random import randint A = [randint(100, 200) for _ in range(20)]
print('Случайный массив (список):', A)
print('\nРезультат:', min([A[i] + A[i+1] for i in range(19)]))
mathgenius: Хочу сделать уже чтобы все было максимально красиво. А то тут как то скучно...
mathgenius: Cобственно такой вариант я почти придумал, но тут иногда вылезает ошибка выхода из диапазона, надо подумать в чем причина.
mathgenius: from random import randint, random
A = list(filter(lambda x: x <= 200, [randint(100, 200) + float(f'0.{randint(0, 10**randint(0, 13))}') for _ in range(20)]))
print('Случайный массив (список):', A)
print('\nРезультат:', min([A[i] + A[i+1] for i in range(19)]))
ivanbaranov563: Напиши программу, которая заполняет массив из 20 элементов случайными числами на отрезке [-100;200] и находит в каждой половине массива пару соседних элементов, сумма которых максимальна. На python нужно
ivanbaranov563: а на эту не поможешь?

Ответы

Автор ответа: mathgenius
5

from random import randint, random

# A = [randint(100, 200) for _ in range(20)] # Этот вариант удобен для самопроверки, рандомируются только целые числа

'''

Если хотите рандомные вещественные, то можно сделать так:A =[randint(100, 199) + random() for _ in range(20)], но здесь имеется возможный

подводный камень, что получить в random() 0 или 1 практически нереально, поэтому целые числа в список будут попадать крайне редко

(А по сути это будет невозможно). Поэтому тут есть такое хитрое решение (придумал его не сразу): (генерировать числа будет до не более чем 13-го знака.

'''

A = list(map(lambda x: 200*(x>200) + x*(x<=200), [randint(100, 200) + float(f'0.{randint(0, 10**randint(0, 13))}') for _ in range(20)]))

print('Случайный массив (список):', A)

print('\nРезультат:', min([A[i] + A[i+1] for i in range(19)]))

Приложения:

ivanbaranov563: Спасибо огромное
Похожие вопросы