На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение
Администратор




Сообщение: 2955
ссылка на сообщение  Отправлено: 18.10.21 21:10. Заголовок: Задачи 17.202 и 17.203


Павел С. пишет:
 цитата:
"В файле 17-202.txt содержится последовательность целых чисел, которые принимают значения от -10000 до 10000 включительно. Тройка идущих подряд чисел последовательности называется уникальной, если только второе из них является положительным трёхзначным числом, заканчивающимся на 5. Определите количество уникальных троек чисел, а затем – максимальную из всех сумм таких троек."

Словосочетание "только второе" явно указывает на то, что в массиве М, состоящем из трех числе чисел ТОЛЬКО ВТОРОЕ число должно быть трехзначным, быть > 0 и заканчиваться на 5. Из чего следует, что первое и третье НЕ должны быть таковыми.

Другими словами "последовательности называется уникальной", только при соблюдении следующей логики:

М[1] попадает под Условие
И
М[0] НЕ (попадает под Условие )
И
М[2] НЕ (попадает под Условие)
, где М - это массив из трех чисел;
Условие - "должно быть положительным трёхзначным числом, заканчивающимся на 5";

Однако результат решения задачи совпадает с правильным, только при логике:

М[1] попадает под Условие,
М[0] И М[2] - ЛЮБОЕ ЧИСЛО;

Вот решение, у которого ответ совпадает с приведенным:
 data = [int(x) for x in open('17-202.txt')] 

def cond(x):
return 100 <= x < 1000 and x % 10 == 5

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 )

 цитата:
задача 203 демонстрирует ту же логическую ошибку

Вот решение задачи 203:
data = [int(x) for x in open('17-202.txt')] 

def cond(x):
return 100 <= x < 1000 and x % 100 == 12

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 )


___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 22 , стр: 1 2 All [только новые]





Сообщение: 8
ссылка на сообщение  Отправлено: 18.10.21 23:51. Заголовок: Решение 202 на PascalABC


##
var D:= ReadLines('17-202.txt').Select(t -> t.ToInteger).ToArray;
var Trio:=
D.NWise(3).
Select(ar->ar.ToArray)
.Where(ar->(ar[1] >0) and (ar[1] mod 10 = 5) and ((100<=ar[1]) and (ar[1]<=999)));
Trio.Count.Print;
Trio.Select(ar->ar[0]+ar[1]+ar[2]).Max.println;

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 10
ссылка на сообщение  Отправлено: 18.10.21 23:52. Заголовок: Решение 203 на PascalABC


##
Assign(input, '17-202.txt');
var a := ReadInteger;
var b := ReadInteger;
var maxi := -100000;
var count := 0;
while not eof() do
begin
var c := ReadInteger;
if (b > 0) and (b mod 100 =12) and b.Between(100, 999) then
begin
count+=1;
var sum := a + b + c;
maxi := max(maxi, sum);
end;
(a, b) := (b, c);
end;
count.print;
maxi.println;
//}
// или
//{
var D:= ReadLines('17-202.txt').Select(t -> t.ToInteger).ToArray;
var Trio:=
D.NWise(3).
Select(ar->ar.ToArray)
.Where(ar->(ar[1] >0) and (ar[1] mod 100 = 12) and (ar[1] in [100..999]));
Trio.Count.Print;
Trio.Select(ar->ar[0]+ar[1]+ar[2]).Max.println;
//}

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 1
ссылка на сообщение  Отправлено: 19.10.21 12:15. Заголовок: Константин Юрьевич, ..


Константин Юрьевич, позвольте с Вами не согласиться .

Вот список троек чисел сформировавших ответ, указанный как правильный:

1 [-5986, 385, 4029]
2 [4029, 265, -8961]
3 [-9252, 565, 3533]
4 [7858, 395, 6516]
5 [-2981, 185, 5430]
6 [-8403, 115, 7598]
7 [-773, 305, 777]
8 [-8636, 825, 7158]
9 [-8043, 825, -405]
10 [1629, 255, 6264]
11 [-3506, 595, -4402]
12 [-3812, 605, -5017]
13 [4921, 715, 3511]
14 [5637, 395, 2042]
15 [1266, 695, 3020]
16 [-6107, 655, -9268]
17 [-6548, 255, 5536]
18 [-1832, 465, -9972]

Если посмотреть на это список внимательно, то становиться очевидным, что не все из них попадают под ключевое условие задачи.

Процитирую его еще раз:
"Тройка идущих подряд чисел ..., если только второе из них является положительным трёхзначным числом, заканчивающимся на 5"


1. Очевидно, по под условие "...только второе из них является положительным трёхзначным числом..." попадают только тройки чисел с номерами 9,11,12,16,18

Соответственно правильным решением задачи является конструкция

if (data[i-2] < 0) and cond(data[i-1]) and (data[ i] < 0)

т.е ТОЛЬКО второе число является положительным, и подлежит дальнейшей проверке, а для отрицательных значений первого и последнего числа тройки остальные условия можно не проверять.

Таким образом тройки чисел, которые должны формировать результат остаются:

9 [-8043, 825, -405]
11 [-3506, 595, -4402]
12 [-3812, 605, -5017]
16 [-6107, 655, -9268]
18 [-1832, 465, -9972]

2. При получении максимального значения, используется конструкция:

m = 0;
...
m = max(m, sum(...))

При ее использовании максимальный результат будет всегда больше нуля, хотя в условии задачи явно обозначено, что мы работаем с последовательностью целых чисел, которые принимают значения от -10000 до 10000.

С учетом п.1 в последовательности может быть тройка:

-10000, 5, -10000

Таким образом максимально возможное значение m = sum(-10000, 5, -10000) = -19995


Я считаю, что правильный ответ к задаче:

5 -7313

который сформирован из списка троек:

1 [-8043, 825, -405]
2 [-3506, 595, -4402]
3 [-3812, 605, -5017]
4 [-6107, 655, -9268]
5 [-1832, 465, -9972]

полученных конструкцией

if (data[i-2] < 0) and cond(data[i-1]) and (data < 0)

и начальным значением m = -19995;

PS:

Обратите внимание, что если в текущем решении задачи заменить условие

if (not cond(data[i-2])) and cond(data[i-1]) and (not cond(data))

на

if cond(data[i-1])

мы получим тот же результат (18 14769), т.е значения data[i-2] и data могут быть любыми

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2960
ссылка на сообщение  Отправлено: 19.10.21 12:23. Заголовок: gk.aledar пишет: Соо..


gk.aledar пишет:
 цитата:
Соответственно правильным решением задачи является конструкция
if (data[i-2] < 0) and cond(data[i-1]) and (data[ i] < 0),
т.е ТОЛЬКО второе число является положительным, и подлежит дальнейшей проверке, а для отрицательных значений первого и последнего числа тройки остальные условия можно не проверять.

В условии задачи такого нет. Это вы сами додумали.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 2
ссылка на сообщение  Отправлено: 19.10.21 12:27. Заголовок: В условии задачи ска..


В условии задачи сказано:

 цитата:
если только второе из них является положительным трёхзначным числом, заканчивающимся на 5



Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 3
ссылка на сообщение  Отправлено: 19.10.21 12:30. Заголовок: те первое и третье ч..


те первое и третье число
а) НЕ должно быть положительным;
б) НЕ должно быть трехзначным;
в) НЕ должно заканчиваться на 5

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2961
ссылка на сообщение  Отправлено: 19.10.21 12:31. Заголовок: gk.aledar пишет: те ..


gk.aledar пишет:
 цитата:
те первое и третье число
а) НЕ должно быть положительным;
б) НЕ должно быть трехзначным;
в) НЕ должно заканчиваться на 5

Боюсь, что вы неправильно понимаете закон де Моргана (отрицание конъюнкции).

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 4
ссылка на сообщение  Отправлено: 19.10.21 12:41. Заголовок: Константин Юрьевич, ..


Константин Юрьевич, поясните пожалуйста

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 485
ссылка на сообщение  Отправлено: 19.10.21 12:48. Заголовок: НЕ (положительное И ..


НЕ (положительное И трёхзначное И должно оканчиваться на 5) = НЕ положительное ИЛИ НЕ трёхзначное ИЛИ НЕ оканчивается на 5

Discussio mater veritas est Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2962
ссылка на сообщение  Отправлено: 19.10.21 12:49. Заголовок: В условии сказано, ч..


В условии сказано, что второе число должно быть а) положительным, б) трехзначным и в) заканчиваться на 5. В тройке только второе число должно удовлетворять этому условию, остальные два не должны ему удовлетворять. Это ровно то, что написано у меня в программе.
Можно записать по частям, используя закон де Моргана: not(a*b*c) = not a + not b + not c. Следовательно, для первого и третьего чисел в тройке не должно выполняться ХОТЯ БЫ ОДНО условие из а)-в):
т.е. первое и третье число
а) НЕ должно быть положительным
ИЛИ
б) НЕ должно быть трехзначным;
ИЛИ
в) НЕ должно заканчиваться на 5

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 5
ссылка на сообщение  Отправлено: 19.10.21 13:35. Заголовок: Я не могу этого объя..


Я не могу этого объяснить так же красиво как Вы, но мне кажется, что тут есть несоответствие логике.

Получается, что при прочих равных для второго числа должны быть соблюдены ВСЕ условия, а для первого и третьего может быть не соблюдено только одно из.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 6
ссылка на сообщение  Отправлено: 19.10.21 13:39. Заголовок: Получается что прове..


Получается что проверка трех чисел происходит по разной формуле

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 486
ссылка на сообщение  Отправлено: 19.10.21 15:47. Заголовок: Получается, что при ..



 цитата:
Получается, что при прочих равных для второго числа должны быть соблюдены ВСЕ условия, а для первого и третьего может быть не соблюдено только одно из.



Да, всё верно. В чём по вашему несоответствие?

Discussio mater veritas est Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 7
ссылка на сообщение  Отправлено: 19.10.21 16:46. Заголовок: Нет, Константин Юрье..


Нет, Константин Юрьевич, позвольте все таки с Вами категорически не согласиться.

Как Вы правильно заметили

 цитата:
В условии сказано, что второе число должно быть а) положительным, б) трехзначным и в) заканчиваться на 5. В тройке только второе число должно удовлетворять этому условию, остальные два не должны ему удовлетворять.



Далее автор задания (следуя устоявшимся парадигмам программирования по минимизации и изоляции кода), выносит проверку этого условия в отдельную функцию и получает:

(Положительное И Трёхзначное И заканчивается на 5) - условие истинности для второго числа в тройке
НЕ (Положительное И Трёхзначное И заканчивается на 5) - условие истинности для первого и третьего числа в тройке

после чего применив закон де Моргана


 цитата:
not(a*b*c) = not a + not b + not c



получает железную, но не правильную логику:

для второго числа ДОЛЖНЫ выполняться все ТРИ условия, а для первого и третьего НЕ ДОЛЖНО выполняться ХОТЯ БЫ ОДНО

апеллируя к законом де Моргана пытаясь объяснить правильность СВОЕГО СПОСОБА проверки условия решения.


Из условий же задачи:

 цитата:
только второе из них является положительным трёхзначным числом, заканчивающимся на 5



можно сделать вывод, что

для второго числа ДОЛЖНЫ выполняться ВСЕ ТРИ условия, а для первого и третьего ВСЕ ТРИ выполняться НЕ ДОЛЖНЫ.

Таким образом логика решения, соответствующее формулировке задачи является

(Положительное И Трёхзначное И заканчивается на 5) - условие истинности для второго числа в тройке

(НЕ Положительное И НЕ Трёхзначное И НЕ заканчивается на 5) - условие истинности для первого и третьего числа в тройке


Хотелось бы услышать Ваше мнение.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2965
ссылка на сообщение  Отправлено: 19.10.21 16:49. Заголовок: gk.aledar пишет: Хот..


gk.aledar пишет:
 цитата:
Хотелось бы услышать Ваше мнение.

Я высказал свое мнение, другого у меня нет. Вы имеете право иметь свое, конечно же.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 22 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 145
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет