Форум » Массивы, сортировка, работа с файлами » Задание 26, № 2643 (Е. Джобс) » Ответить

Задание 26, № 2643 (Е. Джобс)

J3: [quote](№ 2643) (Е. Джобс) Робот складывает монеты в ящики. Задача робота заполнить как можно большее количество ящиков монетами в количестве 100 штук. Роботу по конвейеру поступают корзины с монетами. В каждой корзине может быть от 1 до 99 монет. Известно, что робот может высыпать в ящик содержимое не более двух корзин. Необходимо определить, сколько ящиков можно заполнить монетами по 100. Входные данные представлены в файле 26-j1.txt следующим образом. В первой строке записано число N – количество корзин, в каждой из последующих N строк число K – количество монет в каждой корзине. В качестве ответа дать одно число – количество ящиков, заполненными 100 монетами. Пример входного файла: 7 10 44 66 90 65 47 34 При таких исходных данных можно заполнить только 2 ящика по 100 монет 10 + 90 и 66 + 34. Ответ: 2.[/quote] Приветствую. При решении возникла идея разделить список data на два списка: mnogo и malo (в одном значения больше или равно 50, в другом меньше), и через цикл проверять сумму элементов из каждого списка, если сумма равна 100, то увеличиваю значение переменной kolvo на 1, а значениям mnogo[ i ] и malo[j] присваиваю нуль. Ответ: 3810, когда на сайте 3845. [pre2] with open('26-j1.txt', 'r') as F: data = F.readlines() del data[0] data = sorted(list(map(int, data))) malo = [] mnogo = [] for i in range(0,len(data)): if data[ i ]>= 50: mnogo.append(data[ i ]) else: malo.append(data[ i ]) mnogo = sorted(mnogo, reverse=True) kolvo = 0 for i in range(0,len(mnogo)): for j in range(0,len(malo)): if mnogo[ i ] + malo[j] == 100: kolvo += 1 mnogo[ i ] = 0 malo[j] = 0 print(kolvo) [/pre2]

Ответов - 4

J3: Как оказалось, я допустил очевидную ошибку. При разделении списка на два других, я не учел того, что значение 50 уйдет только в один список, а значит проверить их (там несколько значений 50) попросту не было возможным, поскольку проверялась сумма элементов именно из двух списков.

shervlad: Добрый день! Помогите, пожалуйста, разобраться, что делаю не так. Вот мое решение к данной задаче: [pre2] a = [int(x) for x in open('26-j1.txt')] a = a[1:] count = 0 for i in range(len(a)-1): for j in range(i+1,len(a)): if a[ i] + a[j] == 100: count += 1 print(count) [/pre2] Если я верно понял условие, требуется подсчитать количество пар элементов, в сумме дающих 100. Ответ получается 349056, с ответом не сходится. В чем моя ошибка?

Поляков: shervlad пишет: В чем моя ошибка? Вы считаете возможным, что одно значение из массива участвует в образовании нескольких пар. Попробуйте изучить решение, которое лежит на сайте. Там не все так просто.


shervlad: Поляков пишет: Вы считаете возможным, что одно значение из массива участвует в образовании нескольких пар. Да, действительно, это я не учел. Переписал код, все получилось. Спасибо за помощь!



полная версия страницы