Форум » Обработка целых чисел » 5175 неверный ответ » Ответить

5175 неверный ответ

Ar3turrr: Правильный ответ: 838 3819 [pre2]with open('24-215.txt') as file: l = [ int(i) for i in file] l2 = [] count = 0 mincount = 10 ** 6 for i in l: if i % 401 == 0: l2.append(i) max401 = max(l2) def F(a, b, c): A = B = C = 0 for i in str(b) + str(c): A += int(i) for i in str(a) + str(c): B += int(i) for i in str(a) + str(b): C += int(i) if a % A == 0 or b % B == 0 or c % C == 0 and (a + b + c) > max401: return True for i in range(len(l) - 2): if F(l[ i], l[ i + 1], l[ i + 2]): count += 1 mincount = min(mincount, l[ i] + l[ i + 1] + l[ i + 2]) print(count, mincount)[/pre2]

Ответов - 13

sgglazkov: Обратите внимание на приоритет операций в Python: and выполняется раньше чем or, а Вам здесь нужно связать два отдельных условия. Постановка вот таких скобок решит проблему [pre2]if (a % A == 0 or b % B == 0 or c % C == 0) and (a + b + c) > max401: return True [/pre2]

s11kai: sgglazkov пишет: if (a % A == 0 or b % B == 0 or c % C == 0) and (a + b + c) > max401: return True Запусти предложенный код и убедись - не работает

Ar3turrr: спасибо!


s11kai: Ar3turrr пишет: Правильный ответ: 838 3819 with open('24-215.txt') as file: Господа, подскажите, пожалуйста, о какой задаче идет разговор? Нашел 6 задач работающих с файлом 24-215.txt, но там везде прописано: "Определите максимальное... количество идущих подряд..." А у вас идет поиск минимального Ar3turrr пишет: mincount = min(mincount, l[ i] + l[ i + 1] + l[ i + 2])

Ar3turrr: s11kai Я не скачиваю файлы каждый раз, а перезаписываю один и тот же для разных задач. Файл к заданию правильный, просто с другим названием.

s11kai: Ar3turrr пишет: Я не скачиваю файлы каждый раз, а перезаписываю один и тот же для разных задач. Файл к заданию правильный, просто с другим названием. Как участникам форума тогда понять, какой файл был использован, где и как его найти, если название одно, заголовки другие, а содержание кода вообще другое из шапки следует, что работаем с файлом 24 - 215 Ar3turrr пишет: with open('24-215.txt') as file: Но в заданиях 24 нет задания 5175 Ar3turrr пишет: Заголовок: 5175 неверный ответ Как пользователю понять из какого раздела данная задача?

s11kai: Ar3turrr пишет: Правильный ответ: 838 3819 [pre2] with open('24-215.txt') as file: l = [ int(i) for i in file] l2 = [] count = 0 mincount = 10 ** 6 for i in l: if i % 401 == 0:[/pre2] Верный номер задания догнал по данному делителю: if i % 401 == 0: Я фигею, вообще-то, это задание из егэ 17, вот его условие: В файле 17-300.txt содержится последовательность целых чисел. Элементы последовательности могут принимать значения от 0 до 10000 включительно. Найдите все тройки элементов последовательности, в которых хотя бы одно число делится на сумму цифр двух других чисел в тройке, а сумма чисел тройки больше, чем максимальный элемент последовательности кратный 401. В ответе запишите количество найденных троек, затем минимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.

s11kai: Ar3turrr пишет: Правильный ответ: 838 3819 Вот два решения данной задачи, и оба дают ответ: 774 9700 [pre2] #Вариант № 1 data = [ int(x) for x in open("17-300.txt") ] N = len(data) def sumDigits( n ): return sum( map(int, str(n)) ) max401 = max( x for x in data if x % 401 == 0 ) def valid( a, b, c ): return a % (sumDigits(b) + sumDigits(c)) == 0 or \ b % (sumDigits(a) + sumDigits(c)) == 0 or \ c % (sumDigits(a) + sumDigits(b)) == 0 count, mi = 0, None for i in range(N-2): s = sum(data[ i:i+3]) if valid(data[ i], data[i+1], data[i+2]) and s > max401: count += 1 if mi == None or s < mi: mi = s print( count, mi ) #Вариант № 2 with open('17-300.txt') as f: a = [int(x) for x in f.readlines()] ma=0 # ищем максимальное кратное 401 for j in range(len(a)): # аналог if a[j]>ma and a[j]%401==0: ma=a[j] def q(n): # ищем сумму цифр su = 0 # return sum( map(int, str(n)) ) while n: su = su + n%10 n = n//10 return su def f(x,y,z): # делится ли хотя бы одно число на сумму цифр двух других return x % (q(y) + q(z)) == 0 or y % (q(z) + q(x)) == 0 or z % (q(x) + q(y)) == 0 k=[] for j in range(len(a)-2): x = a[j] y = a[j+1] z = a[j+2] s = x+y+z if f(x,y,z) and s > ma : k.append(s) print(len(k),min(k)) [/pre2]

Ж: задание 5175 [pre2] s=[int(c) for c in open('c:/17-300.txt')] ma=max(c for c in s if c%401==0) def g(sp): return sum(sp)>ma and any(a%sum([int(d) for d in str(b)+str(c)])==0 for (a,b,c) in permutations(sp)) pa=[(s+s[i+1]+s[i+2]) for i in range(len(s)-2) if g(s[i:i+3])] print(len(pa),min(pa), pa[:10]) [/pre2]

s11kai: Ж пишет: return sum(sp)>ma and any(a%sum([int(d) for d in str(b)+str(c)])==0 for (a,b,c) in permutations(sp)) NameError: name 'permutations' is not defined

Ж: NameError: name 'permutations' is not defined Строка from itertools import * решит эту проблему (у меня просто сразу все библиотеки подключены, не заметила, что строки нет в коде)

s11kai: Ж пишет: Строка from itertools import * решит эту проблему Нет, это не решит проблему "небрежно опубликованного" вами кода и даже с подключением библиотек! Не верите? Скопируйте опубликованный вами код, и, подключив библиотеки, запустите его на исполнение. (именно скопируйте, а не запускайте тот, что хранится на вашем компьютере) Ж пишет: задание 5175 [pre2] s=[int(c) for c in open('c:/17-300.txt')] ma=max(c for c in s if c%401==0) def g(sp): return sum(sp)>ma and any(a%sum([int(d) for d in str(b)+str(c)])==0 for (a,b,c) in permutations(sp)) pa=[(s +s[i+1]+s[i+2]) for i in range(len(s)-2) if g(s[i:i+3])] print(len(pa),min(pa), pa[:10]) [/pre2] В результате этого получите, как минимум: TypeError: can only concatenate list (not "int") to list

s11kai: Ж, вы молчите! Видимо я вас обидел своими придирками, s11kai пишет: В результате этого получите, как минимум: TypeError: can only concatenate list (not "int") to list простите, я не хотел этого! Дело в том, что html код данной странички воспринимает массив с переменной i как команду перехода на курсив внимательно посмотрите на ваш код: pa=[(s+s[i+1]+s[i+2]) for i in range(len(s)-2) if g(s[i:i+3])] print(len(pa),min(pa), pa[:10]) у вас идет: pa=[s - а далее все идет курсивом, это потому, что веб страница приняла ваш массив s[ i] за команду перехода на наклонный шрифт. избежать этого, есть два способа: первый - заменить i на j второй - перед i сразу после скобки ставить пробел С уважением, s11kai



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