Автор | Сообщение |
|
Отправлено: 12.11.22 11:08. Заголовок: 8.5715
(№ 5715) (Д. Статный) Сергей составляет семизначные десятичные числа, такие что 2-я и 3-я цифры числа представляют собой квадрат первой цифры, а перед последней цифрой числа записан куб последней цифры. Сколько подходящих чисел может составить Сергей? Первая цифра: 1, 2 или 3 - 3 варианта Вторая и третья: квадрат первой - по 1 варианту Последняя цифра: 0, 1, 2 - 3 варианта Предпоследняя цифра: куб последней - 1 вариант Количество чисел 3*1*1*10*10*1*3 = 900 или не правильно понял условие?
|
|
|
Ответов - 10
[только новые]
|
|
|
| Администратор
|
Сообщение: 3773
|
|
Отправлено: 12.11.22 11:28. Заголовок: Первая цифра может б..
Первая цифра может быть от 1 до 9. Квадрат от 01 до 81. Последняя цифра от 0 до 9. Куб от 0 до 729.
|
|
|
|
Отправлено: 12.11.22 11:45. Заголовок: спасибо! Неверно пон..
спасибо! Неверно понял условие
|
|
|
|
Отправлено: 12.11.22 16:07. Заголовок: Решение
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))
|
|
|
|
Отправлено: 03.02.23 04:09. Заголовок: info17 пишет: ans =..
info17 пишет:
цитата: | 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)) |
| Красиво, но можно еще короче, например так: 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)) Но, все равно, слишком долго выполняется, поэтому можно ускорить выполнение, например, так: 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)
|
|
|
|
Отправлено: 03.12.22 17:13. Заголовок: Первая цифра может б..
Первая цифра может быть от 1 до 9. Квадрат от 01 до 81. Последняя цифра от 0 до 9. Куб от 0 до 729. и как будет записано такое число?
|
|
|
|
Отправлено: 01.02.23 11:04. Заголовок: vin пишет: Первая ц..
vin пишет: цитата: | Первая цифра может быть от 1 до 9. Квадрат от 01 до 81. |
| например, так: если 1 - 1, то вторая 0, а третья 1 если 1 - 2, то вторая 0, а третья 4 ... если 1 - 9, то вторая 8, а третья 1
|
|
|
|
Отправлено: 01.02.23 11:11. Заголовок: vin пишет: Последня..
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 Если расставить все циферки по своим местам, согласно условию, то задачка легко решается и без питона, например, так:
|
|
|
|
Отправлено: 01.02.23 11:14. Заголовок: info17 пишет: Перва..
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
|
|
|
|
Отправлено: 06.04.23 09:54. Заголовок: тип 8 задание 282
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)
|
|
|
|
Отправлено: 06.04.23 13:04. Заголовок: Inna_sh пишет: fro..
Inna_sh пишет:
цитата: | 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) |
| Интересное решение, но можно и покороче, например, так: 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) Или, вообще избавиться от длинного условия, например так: 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) A можно и короче, и быстрее по выполнению, например, так: a = [] for i in range(0,10): a.append(10**(3 - len(str(i**3)))) print(9*sum(a))
|
|
|
|