Форум » Кодирование и декодирование информации » 8.5715 » Ответить

8.5715

info17: (№ 5715) (Д. Статный) Сергей составляет семизначные десятичные числа, такие что 2-я и 3-я цифры числа представляют собой квадрат первой цифры, а перед последней цифрой числа записан куб последней цифры. Сколько подходящих чисел может составить Сергей? Первая цифра: 1, 2 или 3 - 3 варианта Вторая и третья: квадрат первой - по 1 варианту Последняя цифра: 0, 1, 2 - 3 варианта Предпоследняя цифра: куб последней - 1 вариант Количество чисел 3*1*1*10*10*1*3 = 900 или не правильно понял условие?

Ответов - 10

Поляков: Первая цифра может быть от 1 до 9. Квадрат от 01 до 81. Последняя цифра от 0 до 9. Куб от 0 до 729.

info17: спасибо! Неверно понял условие

info17: [pre2] ans = [] for x in range(1000000, 10000000): xs = list(map(int, str(x))) if xs[0]**2 == xs[1]*10 + xs[2]: if 0 <= xs[-1]**3 <= 9 and xs[-1]**3 == xs[-2] or \ 9 < xs[-1]**3 < 100 and xs[-1]**3 == xs[-3]*10 + xs[-2] or \ xs[-1]**3 >= 100 and xs[-1]**3 == xs[-4]*100 + xs[-3]*10 + xs[-2]: ans.append(x) print(len(ans)) [/pre2]


s11kai: info17 пишет: [pre2] ans = [] for x in range(1000000, 10000000): xs = list(map(int, str(x))) if xs[0]**2 == xs[1]*10 + xs[2]: if 0 <= xs[-1]**3 <= 9 and xs[-1]**3 == xs[-2] or 9 < xs[-1]**3 < 100 and xs[-1]**3 == xs[-3]*10 + xs[-2] or \ xs[-1]**3 >= 100 and xs[-1]**3 == xs[-4]*100 + xs[-3]*10 + xs[-2]: ans.append(x) print(len(ans)) [/pre2] Красиво, но можно еще короче, например так: [pre2] ans = [] for x in range(1000000, 10000000): xs = list(map(int, str(x))) if xs[0]**2 == xs[1]*10 + xs[2]: if xs[-1]**3 == xs[-2] or xs[-1]**3 == xs[-3]*10 + xs[-2] or xs[-1]**3 == xs[-4]*100 + xs[-3]*10 + xs[-2]: ans.append(x) print(len(ans)) [/pre2]Но, все равно, слишком долго выполняется, поэтому можно ускорить выполнение, например, так: [pre2] kv = kub = 0 for i in range(100,1000): s = [int(x) for x in str(i)] if s[0]**2 == s[1]*10 + s[2]: kv += 1 for i in range(10): kub += 10**(3-len(str(i**3))) print(kv*kub) [/pre2]

vin: Первая цифра может быть от 1 до 9. Квадрат от 01 до 81. Последняя цифра от 0 до 9. Куб от 0 до 729. и как будет записано такое число?

s11kai: vin пишет: Первая цифра может быть от 1 до 9. Квадрат от 01 до 81. например, так: если 1 - 1, то вторая 0, а третья 1 если 1 - 2, то вторая 0, а третья 4 ... если 1 - 9, то вторая 8, а третья 1

s11kai: vin пишет: Последняя цифра от 0 до 9. Куб от 0 до 729. и как будет записано такое число? а куб от 0 до 9 дает значения от 0 до 729 т.е. если на первом месте стоит 5, а на последнем 6, то число будет таким: 5 2 5 2 1 6 6 а, если на первом месте стоит 4, а на последнем 8, то число будет таким: 4 1 6 5 1 2 8 Если расставить все циферки по своим местам, согласно условию, то задачка легко решается и без питона, например, так:

s11kai: info17 пишет: Первая цифра: 1, 2 или 3 - 3 варианта три цифры дают вроде 6 неповторяющихся вариантов: 123 132 213 231 312 321 и 3*3*3 = 27 с повторами иными словами, количество вариантов зависит не только от количества чисел, но и от количества занимаемых ими позиций! В данном случае, квадраты чисел от 1 до 9 - составляют уникальные тройки и их будет ровно 9 1. 101 2. 204 3. 309 4. 416 5. 525 6. 636 7. 749 8. 864 9. 981

Inna_sh: [pre2] from itertools import* k=0 for i in product('0123456789', repeat=7): s=''.join(i) if int(s[0])!=0: if int(s[-1])<3: if int(s[0])**2==int(s[1:3]) and int(s[-1])**3==int(s[-2]): k+=1 elif 2<int(s[-1])<5: if int(s[0])**2==int(s[1:3]) and int(s[-1])**3==int(s[4:6]): k+=1 elif 4<int(s[-1]): if int(s[0])**2==int(s[1:3]) and int(s[-1])**3==int(s[3:6]): k+=1 print(k) [/pre2]

s11kai: Inna_sh пишет: [pre2] from itertools import* k=0 for i in product('0123456789', repeat=7): s=''.join(i) if int(s[0])!=0: if int(s[-1])<3: if int(s[0])**2==int(s[1:3]) and int(s[-1])**3==int(s[-2]): k+=1 elif 2<int(s[-1])<5: if int(s[0])**2==int(s[1:3]) and int(s[-1])**3==int(s[4:6]): k+=1 elif 4<int(s[-1]): if int(s[0])**2==int(s[1:3]) and int(s[-1])**3==int(s[3:6]): k+=1 print(k) [/pre2] Интересное решение, но можно и покороче, например, так: [pre2] from itertools import* k=0 for i in product('0123456789', repeat=7): s=''.join(i) if int(s[0])!=0 and int(s[0])**2==int(s[1:3]) : if int(s[-1])**3==int(s[-2]) or int(s[-1])**3==int(s[4:6]) or int(s[-1])**3==int(s[3:6]): k+=1 print(k) [/pre2] Или, вообще избавиться от длинного условия, например так: [pre2] from itertools import* k = 0 for i in product('0123456789', repeat=7): s=''.join(i) if s[0] != 0 and int(s[0])**2 == int(s[1:3]): f = str(int(s[-1])**3) if s[-4:-1].endswith(f): k += 1 print(k) [/pre2] A можно и короче, и быстрее по выполнению, например, так: [pre2] a = [] for i in range(0,10): a.append(10**(3 - len(str(i**3)))) print(9*sum(a)) [/pre2]



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