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

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

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

АвторСообщение



Сообщение: 5
ссылка на сообщение  Отправлено: 08.05.23 18:40. Заголовок: № 6295


Текст задачи:
(№ 6295) В файле 17-354.txt содержится последовательность целых чисел, по модулю не превышающих 10000. Определите количество пар элементов последовательности, для которых выполняются
следующие условия:
– последняя цифра записи одного из элементов пары совпадает с предпоследней цифрой записи другого элемента;
– ровно один элемент из пары делится без остатка на 11;
– сумма квадратов элементов пары не меньше квадрата среднего арифметического всех элементов последовательности, две последние цифры в записи которых одинаковы.
В ответе запишите два числа: сначала количество найденных пар, затем максимальную величину суммы квадратов элементов этих пар.

Мне не понятна формулировка задания, но вот мой вариант решения(неверный):
 
f = open('17-354.txt')
k = [str(i).strip() for i in f]
s = []
for i in range(len(k)):
if k[0][ ::-1 ][ :2 ] == k[ i ][ ::-1 ][ :2 ]:
s.append(int(k[ i ]))
n, p, m = (sum(s)/len(s))**2, 0, 0
for i in range(len(k)-1):
sum_kv = (int(k[ i ])**2) + (int(k[ i+1 ])**2)
if sum_kv >= n:
if (k[ i ][ -1 ] == k[ i+1 ][ -1 ]) and (((int(k[ i ])%11 == 0) and (int(k[ i+1 ])%11 != 0)) or ((int(k[ i+1 ])%11 == 0) and (int(k[ i ])%11 != 0))):
p += 1
m = max(m, sum_kv)
print(p, m)


Не сходится ответ. Помогите найти ошибку.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 4 [только новые]


Администратор




Сообщение: 4002
ссылка на сообщение  Отправлено: 04.06.23 11:48. Заголовок: gg пишет: Мне не пон..


gg пишет:
 цитата:
Мне не понятна формулировка задания

Что именно непонятно?

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





Сообщение: 108
ссылка на сообщение  Отправлено: 01.07.23 22:40. Заголовок: f=open('c:/17-3..


Возможно, ошибка в том, что последние 2 цифры есть не у всех чисел, а лишь у тех, что по модулю больше 9.
 
f=open('c:/17-354.txt')
s=[int(c) for c in f.readlines()]
a=[c for c in s if abs(c)>9 and str(c)[-1]==str(c)[-2]]
sr=(sum(a)/len(a))**2

def g(a,b):
return abs(b)>9 and str(a)[-1]==str(b)[-2] or abs(a)>9 and str(a)[-2]==str(b)[-1]

pa=[(s**2+s[i+1]**2) for i in range(len(s)-1) if ((s%11==0) + (s[i+1]%11==0))==1 and g(s,s[i+1]) and (s**2+s[i+1]**2)>=sr ]
print(len(pa), max(pa))


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



Сообщение: 1
ссылка на сообщение  Отправлено: 29.12.23 17:18. Заголовок: Ж пишет: f=open(&#..


Ж пишет:

 цитата:
f=open('c:/17-354.txt')
s=[int(c) for c in f.readlines()]
a=[c for c in s if abs(c)>9 and str(c)[-1]==str(c)[-2]]
sr=(sum(a)/len(a))**2

def g(a,b):
return abs(b)>9 and str(a)[-1]==str(b)[-2] or abs(a)>9 and str(a)[-2]==str(b)[-1]

pa=[(s**2+s[i+1]**2) for i in range(len(s)-1) if ((s%11==0) + (s[i+1]%11==0))==1 and g(s,s[i+1]) and (s**2+s[i+1]**2)>=sr ]
print(len(pa), max(pa))



Для начала ваш код не работает, но это легко поправить:

 
f=open('17-354.txt')
s=[int(c) for c in f.readlines()]
a=[c for c in s if abs(c)>9 and str(c)[-1]==str(c)[-2]]
sr=(sum(a)/len(a))**2

def g(a,b):
#return abs(b)>9 and str(a)[-1]==str(b)[-2] or abs(a)>9 and str(a)[-2]==str(b)[-1]
return str(a)[-1]==str(b)[-2] or str(a)[-2]==str(b)[-1]

pa=[(s**2+s[i+1]**2) for i in range(len(s)-1) if ((s%11==0) + (s[i+1]%11==0))==1 and g(s,s[i+1]) and (s**2+s[i+1]**2)>=sr ]
print(len(pa), max(pa))


Проблем с числами, состоящими из одного разряда (<9) не существует в этом документе, т.к. все числа состоят не менее чем из трех разрядов.

Но я не понимаю почему этот код дает правильный ответ. Вот какие я вижу неточности:

1) В задаче сказанно "Определите количество пар элементов последовательности", в задаче нет фраз вида: "Назовём парой два идущих подряд элемента последовательности.", значит парами можно считать два ЛЮБЫХ числа, из этой последовательности, подходящих под прочие условия. Код с верным ответом предполагает, что числа расположенны подряд друг за другом.

2) В тексте задания сказанно: "– сумма квадратов элементов пары не меньше квадрата среднего арифметического всех элементов последовательности, две последние цифры в записи которых одинаковы." Какие две последние цифры одинаковы? В записи чего? Две последних цифры в сумме квадратов элементов пары и квадрата среднего арифметического всех элементов последовательности? нет, это дает ответ 0; Может две последних цифры квадратов элементов пары? Это дает ненулевой ответ, вот только он не правильный. Последние две цифры элементов пары? Тоже ненулевой ответ, тоже не правильный. А правильный дает код выше, вот только он сравнивает два последних разряда в числах пары зеркально: "str(a)[-1]==str(b)[-2] or str(a)[-2]==str(b)[-1] " (где a и b - числа одной пары). Я не понимаю почему нужно использовать сравнение зеркально, на это ничего не указывает в тексте задачи.

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

Я прочла эту задачу так: пары нужно собирать из всех чисел; две последние цифры в записи одного числа пары равны двум последним цифрам в записи второго числа пары.

Код для такого прочтения:

 
f = open('17-354.txt', 'r')
data = f.readlines()
f.close()
summ=0
c=0
maxi = 0
for i in range(len(data)):
data = int(data)
summ += data
sr=(summ/len(data))**2

for i in range(len(data)):
for j in range(i, len(data)):
if int(str(data)[-1]) == int(str(data[j])[-1]):
if ((data%11==0) and (data[j]%11!=0)) or ((data[j]%11==0) and (data%11!=0)):
if (data**2+data[j]**2)>=sr and (data%100 == data[j]%100):
c+=1
maxi=max(maxi, (int(data)**2+int(data[j])**2))
print(c, maxi)


Ответ: 12450 195209282

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





Сообщение: 203
ссылка на сообщение  Отправлено: 30.12.23 16:16. Заголовок: Код не работал, т.к...


1) Код не работал, т.к. я постоянно забываю, что [ i] воспринимается как редактирования текста курсивом и и кода удаляется. Поправила код и добавила комментарии.
2) И я согласна, что надо бы поправить условие и дописать, что подразумевается под парами.
3) в файле есть однозначные числа (как отрицательные, так и положительные)
4) С этим не согласна,
 цитата:
Я прочла эту задачу так: пары нужно собирать из всех чисел; две последние цифры в записи одного числа пары равны двум последним цифрам в записи второго числа пары.

т.к. есть первое условие, которое накладывается именно на пары:
 цитата:
последняя цифра записи одного из элементов пары совпадает с предпоследней цифрой записи другого элемента;



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

 цитата:
сумма квадратов элементов пары не меньше квадрата среднего арифметического всех элементов последовательности, две последние цифры в записи которых одинаковы.


f=open('d:/17-354.txt') 
s=[int(c) for c in f.readlines()]
#а - список элементов последовательности, две последние цифры в записи которых одинаковы.
a=[c for c in s if abs(c)>9 and str(c)[-1]==str(c)[-2]]
# sr - квадрат среднего арифметического всех элементов последовательности, две последние цифры в записи которых одинаковы.
sr=(sum(a)/len(a))**2

# Функция g обрабатывает пару чисел и возвращает истинность условия: последняя цифра записи одного из элементов пары совпадает с предпоследней цифрой записи другого элемента;
def g(a,b): return abs(b)>9 and str(a)[-1]==str(b)[-2] or abs(a)>9 and str(a)[-2]==str(b)[-1]
#рa - список пар соседних элементов, которые удовлетворяют всем условиям
pa=[(s[j]**2+s[j+1]**2) for j in range(len(s)-1) if ((s[j]%11==0) + (s[j+1]%11==0))==1 and g(s[j],s[j+1]) and (s[j]**2+s[j+1]**2)>=sr ]
print(len(pa), max(pa))


А вот код, который работает для любых пар , не обязательно соседних
 
f=open('d:/17-354.txt')
s=[int(c) for c in f.readlines()]
#а - список элементов последовательности, две последние цифры в записи которых одинаковы.
a=[c for c in s if abs(c)>9 and str(c)[-1]==str(c)[-2]]
# sr - квадрат среднего арифметического всех элементов последовательности, две последние цифры в записи которых одинаковы.
sr=(sum(a)/len(a))**2

# Функция g обрабатывает пару чисел и возвращает истинность условия: последняя цифра записи одного из элементов пары совпадает с предпоследней цифрой записи другого элемента;
def g(a,b): return abs(b)>9 and str(a)[-1]==str(b)[-2] or abs(a)>9 and str(a)[-2]==str(b)[-1]
#рa - список пар элементов, которые удовлетворяют всем условиям
pa=[]
for k in range(len(s)-1):
for n in range(k+1,len(s)):
if ((s[k] % 11 == 0) + (s[n] % 11 == 0)) == 1 and g(s[k], s[n]) and (s[k] ** 2 + s[n] ** 2) >= sr:
pa.append(s[k]**2+s[n]**2)
print(len(pa), max(pa))


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

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