Форум » Обработка числовых последовательностей » Задание 27. № 103. Python 3.x » Ответить

Задание 27. № 103. Python 3.x

Lomank: Является ли такое решение правильным? Если да, то на сколько баллов потянет? Массив "a" служит для хранения первых 5-ти чисел, которые в дальнейшем будут сдвигаться. Массив "b" нужен для хранения минимумов и максимумов для каждого a[0] с остатками 0, 1 и 2 при делении на 3 Ссылка на решение: https://postimg.cc/rDqt7dgs (Ссылка на PostImage)

Ответов - 11

cabanov.alexey: Такое решение определённо требует обязательного пояснения хода работы алгоритма. За решение 0 баллов, потому что смешано кислое с пресным. Из косяков на поверхности: 1) В 3 последних условиях нет проверки на минимальную разность. То есть min1, min2, min3 - это последние разности, а не минимальные 2) В print почему-то записана функция max. Может min? Минимальной разницы программа не находит. Мой совет: зайдите на python.org, скачайте интерпретатор и в IDLE пишите код, проверяйте по тесту в задании. Потом сюда к нам. PS Тут по идее надо находить разницу наибольшую по модулю, а потом в ответе ей знак минус приписывать.

Lomank: Здравствуйте, а что если переписать последние 3 условия вот так: (h - это просто переменная для хранения большого условия) N = int(input()) a = [int(input()) for _ in range(5)] b = [[0,1001] for _ in range(3)] min1,min2,min3 = -1,-1,-1 for i in range(5,N): x = int(input()) if a[0] > b[a[0] % 3][0]: b[a[0] % 3][0] = a[0] if a[0] < b[a[0] % 3][1]: b[a[0] % 3][1] = a[0] ------------------------------------ if x % 3 == 0 and b[0][0] != 0 and b[0][1] != 1001: h = abs(b[0][0] - x) if abs(b[0][0] - x) > abs(b[0][1] - x) else abs(b[0][1] - x) min1 = h if h > min1 else min1 if x % 3 == 1 and b[1][0] != 0 and b[1][1] != 1001: h = abs(b[1][0] - x) if abs(b[1][0] - x) > abs(b[1][1] - x) else abs(b[1][1] - x) min2 = h if h > min2 else min2 if x % 3 == 2 and b[2][0] != 0 and b[2][1] != 1001: h = abs(b[2][0] - x) if abs(b[2][0] - x) > abs(b[2][1] - x) else abs(b[2][1] - x) min3 = h if h > min3 else min3 ------------------------------------ for j in range(4): a[j] = a[j+1] a[4] = x if min1 == -1 and min2 == -1 and min3 == -1: print('NO') else: print(- max(min1,min2,min3)) В последней строке я использовал max(), потому что искал максимальную по модулю разность и приписал к ней знак минус (в случае с нулем ошибки не возникло) Тогда вроде как все правильно, но мне кажется это только на 2 балла...

cabanov.alexey: Честно говоря, вообще не понял ваше решение. Сохранять максимумы и минимумы в такой массив - это очень плохая идея. Писать такой малопонятный код - вдвойне плохая идея. Посмотрите моё решение и стремитесь к похожему оформлению. Edit исправил вывод [pre2] n=int(input()) a5=[] for i in range(5): a5.append(int(input())) max0=-1; max1=-1; max2=-1; min0=1001; min1=1001; min2=1001; m=-1 for i in range(5,n): if a5[0]%3==0: max0=max(max0,a5[0]) min0=min(min0,a5[0]) if a5[0]%3==1: max1=max(max1,a5[0]) min1=min(min1,a5[0]) if a5[0]%3==2: max2=max(max2,a5[0]) min2=min(min2,a5[0]) x=int(input()) if x%3==0 and max0!=-1: m=max(m,abs(x-max0)) if x%3==0 and min0!=1001: m=max(m,abs(x-min0)) if x%3==1 and max1!=-1: m=max(m,abs(x-max1)) if x%3==1 and min1!=1001: m=max(m,abs(x-min1)) if x%3==2 and max2!=-1: m=max(m,abs(x-max2)) if x%3==2 and min2!=1001: m=max(m,abs(x-min2)) for i in range(4): a5[i ]=a5[i+1] a5[4]=x if m==-1: print('NO') else: print(-m)[/pre2]


nikson: Код на 3 балла. Ошибка в выводе. В условии написано: Программа должна вывести одно число – минимальную разность удовлетворяющую условию или «NO», если такую разность получить нельзя. Нет вывода, когда печатается "NO"

nikson: Алексей, Ваш код не проходит тест: 12 4 7 11 15 19 23 27 31 27 19 15 11 Ответ программа выдает -15, а должен быть -27. Не правильно работает с остатками 1

nikson: Также код не проходит тест: 12 7 7 7 7 7 7 7 7 7 7 7 7 Ответ выдает программа NO, а верный 0

nikson: Также код не проходит тест: 12 3 7 11 15 19 23 27 33 27 19 15 11 Ответ программы -978, а верный -30 Программа не верно работает с остатками 0

nikson: Код прошел только 1 тест: 12 12 23 34 35 56 78 21 43 76 89 76 55 Правильно обрабатывает остатки 2. Ответ -66

nikson: Наверно нужно подправить код и выложить в отдельном окне

nikson: Подправил Ваш код n=int(input()) a5=[] for i in range(5): a5.append(int(input())) max0=-1; max1=-1; max2=-1; min0=1001; min1=1001; min2=1001; m=-1 for i in range(5,n): if a5[0]%3==0: max0=max(max0,a5[0]) min0=min(min0,a5[0]) if a5[0]%3==1: max1=max(max1,a5[0]) min1=min(min1,a5[0]) if a5[0]%3==2: max2=max(max2,a5[0]) min2=min(min2,a5[0]) x=int(input()) if x%3==0 and max0!=-1: m=max(m,abs(x-max0)) if x%3==0 and min0!=1001: m=max(m,abs(x-min0)) if x%3==1 and max1!=-1: m=max(m,abs(x-max1)) if x%3==1 and min1!=1001: m=max(m,abs(x-min1)) if x%3==2 and max2!=-1: m=max(m,abs(x-max2)) if x%3==2 and min2!=1001: m=max(m,abs(x-min2)) for i in range(4): a5[i ]=a5[i+1] a5[4]=x if m==-1: print('NO') else: print(-m)

nikson: Ошибка везде была в мах0, заменил на мах1 и мах2 соответственно



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