Форум » Обработка целых чисел » Задание 17 №4423 » Ответить

Задание 17 №4423

koBANov: И так дорогие друзья вам пишет ученик 3 - его класса школы коррекции. Вот решение и ответ которые нам предлагают.[pre2] data = [int(x) for x in open('17.txt')] def cond(x): return x > 0 and x % 10 == 9 ma = 0 count = 0 for i in range(2,len(data)): if (not cond(data[i-2])) and cond(data[i-1]) and \ (not cond(data[ i])): count += 1 ma = max(ma, sum(data[i-2:i+1])) print( count, ma)[/pre2] Ответ:206 23427 Итак, как мы все знаем при отрицании операнда И он превращается в операнд ИЛИ. Из-за этого в приведенном выше коде случается ошибка, когда не подходящие по условию числа учитываются в ответе. МОЖНО ИСПРАВИТЬ ДАННЫЙ КОД, НАПИСАВ НОВЫЙ,(ЭТОТ УЖЕ НЕ СПАСТИ)(шутка). Вот правильное написание:[pre2] data = [int(x) for x in open('17.txt')] def cond1(x): return x > 0 and x % 10 == 9 def cond(x): return x > 0 ma = 0 count = 0 for i in range(2,len(data)): if (not cond(data[i-2])) and cond1(data[i-1]) and \ (not cond(data[ i])): count += 1 ma = max(ma, sum(data[i-2:i+1])) print( count, ma)[/pre2] Ответ: 63 6241 НО если вы мне не верите могу представить вашему вниманию еще один код:[pre2] with open('17.txt') as f: s = [int(i) for i in f.readlines()] d = [] for o in range(len(s)-2): if s[o+1] > 0 and s[o] < 0 and s[o+2] < 0 and s[o+1] % 10 == 9: d.append(s[o] + s[o+1] + s[o+2]) print(max(d),len(d))[/pre2] Ответ: 6241 63

Ответов - 5

yflzu@mail.ru: В исходном коде нет отрицания операнда И, оператор not относится только к функции cond(). Ответ на сайте правильный. Можете решить задачу в Excel и наглядно увидеть эти 206 троек.

koBANov: хмхмхм жалко нельзя кидать скриншоты но вот моя формула в exel =ЕСЛИ(И(A1<0;A2>0;A3<0;ОСТАТ(A2;10)=9);1;0) и она тоже показывает 63. КАК ХОРОШО ЧТО ЛЮДИ ПРОВЕРЯЮТ ИНФОРМАЦИЮ ПЕРЕД ТЕМ КАК ОТВЕТИТЬ.

Поляков: Условие x > 0 and x % 10 == 9 должно выполняться только для второго числа тройки. Это значит, что для остальных двух чисел должно выполняться обратное условие: x <= 0 or x % 10 != 9. Как вы правильно заметили, при инверсии and меняется на or. Если вы хотели решить задачу с двумя условиями, это можно было сделать так: [pre2] data = [int(x) for x in open('17-204.txt')] def cond1(x): return x > 0 and x % 10 == 9 def cond(x): return x <= 0 or x % 10 != 9 ma = 0 count = 0 for i in range(2,len(data)): if cond(data[i-2]) and cond1(data[i-1]) and \ cond(data[ i]): count += 1 ma = max(ma, sum(data[i-2:i+1])) print( count, ma)[/pre2]Ответ на сайте верный.


koBANov: Но разве если там стоит or то это уже не будет ошибкой? приведу пример у нас есть тройка 1346 4539 -1244 так вот логической операции or достаточно выполнения одного условия из двух чтобы вернуть True поэтому мы зачтем эту тройку хотя в условии написано: Тройка идущих подряд чисел последовательности называется уникальной, если только второе из них является положительным числом. Поэтому я и написал сюда с просьбой исправить ответ или поменять формулировку задания

Поляков: koBANov пишет: у нас есть тройка 1346 4539 -1244 так вот логической операции or достаточно выполнения одного условия из двух чтобы вернуть True поэтому мы зачтем эту тройку Да, это подходяшщая тройка. Она соответствует условию задачи.



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