Форум » Системы счисления » задание 14 задача 364 неверный ответ » Ответить

задание 14 задача 364 неверный ответ

blv239: Решения задач правильный 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)))

Ответов - 9

Поляков: Вот авторское решение:[pre2] 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 [/pre2]

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

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


blv239: Спасибо за ответ. Еще одна ошибка не исправлена. По условию задачи автора: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 >>>

Поляков: blv239 пишет: Еще одна ошибка не исправлена. Уже исправлена, спасибо.

Ольга Тузова: А что не так в решении, где получен тот же ответ, но при других значениях a? (a = 23 и 52) При этом для указанных в решении автора значениях а указанные в условии выражения не делятся на 29. [pre2] 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)) [/pre2]

Поляков: Ольга Тузова пишет: А что не так в решении, где получен тот же ответ, но при других значениях a? (a = 23 и 52) Это и есть единственное правильное решение. В авторском решении, показанном выше, была ошибка и сейчас она исправлена. Но ответ не поменялся - 86130. Вот еще вариант решения: [pre2] 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] ) [/pre2]

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

s11kai: С учетом того, что нам ни что не запрещает пользоваться Excel, то там можно посмотреть что X = 33, Y = 34, Z = 35, и, программу можно сократить, например, так: [pre2] 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]) )[/pre2]



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