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

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

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

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



Не зарегистрирован
ссылка на сообщение  Отправлено: 27.09.22 09:49. Заголовок: задание 14 задача 364 неверный ответ


Решения задач правильный 0
Вариант 1
c = 0
for a in range(0, 44):
b = ((35 - 2) * (55 ** 3) + (a - 33) * (55 ** 2) + (34 - a) * (55 ** 1) + (33 - 34))
if b % 29 == 0:
if c == 0:
f = a
print(a)
c += 1
r = a
print(r)
b = ((35 - 2) * (55 ** 3) + (r - 33) * (55 ** 2) + (34 - r) * (55 ** 1) + (33 - 34))
d = ((35 - 2) * (55 ** 3) + (f - 33) * (55 ** 2) + (34 - f) * (55 ** 1) + (33 - 34))
e = d - b
if e < 0:
e = b - d
print(e)
Вывод:
23
23
0
>>>

Вариант 2
def f(c):
return 10 + ord(c) - ord('A')

a1 = -1
a2 = -1
for x in range(44):
a = f('Z') * 55 ** 3 + x * 55 ** 2 + f('Y') * 55 + f('X') - 2 * 55 ** 3 - f('X') * 55 ** 2 - x * 55 - f('Y')
if a % 29 == 0:
if a1 == -1:
a1 = x
a2 = x
b = f('Z') * 55 ** 3 + a1 * 55 ** 2 + f('Y') * 55 + f('X') - 2 * 55 ** 3 - f('X') * 55 ** 2 - a1 * 55 - f('Y')
c = f('Z') * 55 ** 3 + a2 * 55 ** 2 + f('Y') * 55 + f('X') - 2 * 55 ** 3 - f('X') * 55 ** 2 - a2 * 55 - f('Y')
print(abs(b - c))

Вариант 3
mn = 0
mx = 0
for a in range(0, 43) :
if (35 * 55 ** 3 + a * 55 ** 2 + 34 * 55 + 33 - 2 * 55 ** 3 + 33 * 55 ** 2 + a * 100 + 34) % 29 == 0 :
if mn == 0 :
mn = a
mx = a
print(mx - mn)

Вариант 4
mini = 44
maxi = 0
for a in range(44):
if ((33-34) + 55 * (34-a) + 55**2 * (a-33) + 55**3 * (35-2)) % 29 == 0:
if a < mini:
mini = a
if a > maxi:
maxi = a

print(mini, maxi)
n = ((33-34) + 55 * (34-maxi) + 55**2 * (maxi-33) + 55**3 * (35-2)) - ((33-34) + 55 * (34-mini) + 55**2 * (mini-33) + 55**3 * (35-2))
print(n)

Вариант 5
b=[]
for i in range(44):
if ((33+55*34+55*55*i+55*55*55*35)-(34+55*i+55*55*33+2*55*55*55))%29==0:
b.append(i)
print(b)
print(b[-1]-b[0])

Вариант 6
s=[]
for n in range(55):
for m in range(55):
for p in range(55):
for q in range(44):
a = [n, q, m, p]
b = [2, p, q, m]
for i in range(4):
a[3-i] = a[3-i] * 55 ** i
b[3-i] = b[3-i] * 100 ** i
if (sum(a) + sum(b))%29 == 0:
s.append(q)
print(max(s))
print(min(s))
print(abs(max(s)-min(s)))

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


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




Сообщение: 3707
ссылка на сообщение  Отправлено: 27.09.22 20:54. Заголовок: Вот авторское решени..


Вот авторское решение:
 def perevod(s,c,x): 
a = 0
for i in range(len(s)):
if s[ i] != 'a':
a += int(s[ i],36) * c**i
else:
a+= x * c**i
return a

dig =[i for i in range(55)]
b = 29
otv = []
for a in dig:
s1='ZaYX'[::-1]
s2='2XaY'[::-1]
res = perevod(s1,55,a) - perevod(s2,55,a)
if res % b == 0:
print(a, res, 'Частное:', res/b)
otv.append(res)
print('Otvet:', max(otv)-min(otv))

# a = 23, 52
# Ответ: 86130


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



Не зарегистрирован
ссылка на сообщение  Отправлено: 01.10.22 11:41. Заголовок: Авторское решение неверно


Авторское решение неверно. Переменная a должна перебираться не на промежутке [0, 55), а на промежутке [0, 44), так как это цифра из алфавита 44-ричной системы счисления. Также неправильно переписана строка s2: в конце строки должен стоять Y, а не X.

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




Сообщение: 3718
ссылка на сообщение  Отправлено: 04.10.22 13:42. Заголовок: По поводу 44-ричной ..


По поводу 44-ричной системы: это была опечатка, она исправлена.

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



Не зарегистрирован
ссылка на сообщение  Отправлено: 07.10.22 16:34. Заголовок: Авторское решение неверно.


Спасибо за ответ.
Еще одна ошибка не исправлена. По условию задачи автора:364) (И. Степанов) Операнды арифметического выражения записаны в системе счисления с основанием 55.
ZaYX55 – 2XaY55
В записи чисел переменной a обозначена неизвестная цифра из алфавита 55-ричной системы счисления. Определите наибольшее и наименьшее значение a, при котором значение данного арифметического выражения кратно 29. Для найденных значений a найдите модуль разности значений соответствующих выражений.

2XaY55? а не 2XaX55

Тогда при запуске авторской программы:
def perevod(s,c,x):
a = 0
for i in range(len(s)):
if s[ i] != 'a':
a += int(s[ i],36) * c**i
else:
a+= x * c**i
return a

dig =[i for i in range(44)]
b = 29
otv = []
for a in dig:
s1='ZaYX'[::-1]
s2='2XaY'[::-1]
res = perevod(s1,55,a) - perevod(s2,55,a)
if res % b == 0:
print(a, res, 'Частное:', res/b)
otv.append(res)
print('Otvet:', max(otv)-min(otv))

Выводится ответ:
= RESTART: E:/Учебный год 2022 - 2023/11 - 4 класс/ЕГЭ 2023 задача 14/z Polakov.py
23 5460729 Частное: 188301.0
Otvet: 0
>>>

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




Сообщение: 3746
ссылка на сообщение  Отправлено: 13.10.22 20:38. Заголовок: blv239 пишет: Еще од..


blv239 пишет:
 цитата:
Еще одна ошибка не исправлена.

Уже исправлена, спасибо.

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



Не зарегистрирован
ссылка на сообщение  Отправлено: 03.03.23 13:06. Заголовок: Тот же ответ при других значениях переменной a


А что не так в решении, где получен тот же ответ, но при других значениях a? (a = 23 и 52) При этом для указанных в решении автора значениях а указанные в условии выражения не делятся на 29.
 
def dig(ch):
return 10 + ord(ch) - ord ("A")
x = dig('X')
y = dig('Y')
z = dig('Z')

def perevod (a):
return z*55**3+a*55**2+y*55+x - (2*55**3+x*55**2+a*55+y)

for a in range(55):
n = perevod(a)
if n % 29 == 0:
print(a, "n=", n, n % 29)
break
for a in range(54, 0, -1):
n1 = perevod(a)
if n1 % 29 == 0:
print(a, "n1=", n1, n1 % 29)
break
print (abs(n1-n))


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




Сообщение: 3923
ссылка на сообщение  Отправлено: 03.03.23 13:47. Заголовок: Ольга Тузова пишет: ..


Ольга Тузова пишет:
 цитата:
А что не так в решении, где получен тот же ответ, но при других значениях a? (a = 23 и 52)

Это и есть единственное правильное решение. В авторском решении, показанном выше, была ошибка и сейчас она исправлена. Но ответ не поменялся - 86130.
Вот еще вариант решения:
 import string 

alpha = '0123456789' + string.ascii_uppercase + string.ascii_lowercase
alpha = alpha[:55]

def fromBase( s, base ):
n = 0
for c in s:
d = alpha.index(c)
n = base*n + d
return n

results = []
for a in alpha:
diff = fromBase( f"Z{a}YX", 55 ) - fromBase( f"2X{a}Y", 55 )
if diff % 29 == 0:
print( a, diff )
results.append( (a, diff) )

print( 'Ответ:', results[-1][1] - results[0][1] )


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



Сообщение: 12
ссылка на сообщение  Отправлено: 03.03.23 18:05. Заголовок: Спасибо!


Спасибо за ответ и красивое решение

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





Сообщение: 386
ссылка на сообщение  Отправлено: 05.04.23 11:11. Заголовок: С учетом того, что н..


С учетом того, что нам ни что не запрещает пользоваться Excel, то там можно посмотреть
что X = 33, Y = 34, Z = 35, и, программу можно сократить, например, так:
 
n = []
for a in range(0,54+1):
a1 = 35*55**3 + a*55**2 + 34*55 + 33
a2 = 2*55**3 + 33*55**2 + a*55 + 34
if (a1 - a2)%29 == 0:
n+=[a1 - a2]
print( abs(n[0] - n[-1]) )


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

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