Автор | Сообщение |
|
Отправлено: 20.03.22 18:45. Заголовок: Задание 26, № 2643 (Е. Джобс)
цитата: | (№ 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. |
| Приветствую. При решении возникла идея разделить список data на два списка: mnogo и malo (в одном значения больше или равно 50, в другом меньше), и через цикл проверять сумму элементов из каждого списка, если сумма равна 100, то увеличиваю значение переменной kolvo на 1, а значениям mnogo[ i ] и malo[j] присваиваю нуль. Ответ: 3810, когда на сайте 3845. 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)
|
|
|
Ответов - 4
[только новые]
|
|
|
Отправлено: 20.03.22 21:54. Заголовок: Ошибка найдена
Как оказалось, я допустил очевидную ошибку. При разделении списка на два других, я не учел того, что значение 50 уйдет только в один список, а значит проверить их (там несколько значений 50) попросту не было возможным, поскольку проверялась сумма элементов именно из двух списков.
|
|
|
|
Отправлено: 26.03.22 18:19. Заголовок: Добрый день! Помогит..
Добрый день! Помогите, пожалуйста, разобраться, что делаю не так. Вот мое решение к данной задаче: 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) Если я верно понял условие, требуется подсчитать количество пар элементов, в сумме дающих 100. Ответ получается 349056, с ответом не сходится. В чем моя ошибка?
|
|
|
|
| Администратор
|
Сообщение: 3410
|
|
Отправлено: 26.03.22 18:21. Заголовок: shervlad пишет: В че..
shervlad пишет: Вы считаете возможным, что одно значение из массива участвует в образовании нескольких пар. Попробуйте изучить решение, которое лежит на сайте. Там не все так просто.
|
|
|
|
Отправлено: 26.03.22 18:39. Заголовок: Поляков пишет: Вы с..
Поляков пишет: цитата: | Вы считаете возможным, что одно значение из массива участвует в образовании нескольких пар. |
| Да, действительно, это я не учел. Переписал код, все получилось. Спасибо за помощь!
|
|
|
|