С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
3 / 3 / 0
Регистрация: 16.02.2019
Сообщений: 23
1

Задача по теории чисел - программированием

15.01.2023, 16:48. Показов 2760. Ответов 9

Author24 — интернет-сервис помощи студентам
Задачу из ЕГЭ по математике хочу попробовать решить при помощи программирования на Python.
Задача такая:
Костя выписал несколько натуральных трехзначных чисел, в которых средняя цифра равна 0, а остальные - ненулевые. Сумма всех выписанных чисел равна S. Затем в каждом числе он поменял местами первую и последнюю цифры. После этого сумма всех чисел стала равна P.
а) Возможно ли, что S = 11425, а P = 22612?
б) Какое наибольшее целое значение может принимать отношение S/P?
в) Найдите наибольшее возможное значение P, если S = 29997.

Начало решения привожу ниже. Основная проблема в том, чтобы организовать цикл, в котором будут браться 2, 3, ..., 80 чисел (потому что всего вариантов таких чисел 9 * 9).

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from itertools import *
 
s = 11425
p = 22612
 
# генерируем все варианты трехзначных чисел, соответствующих условию
a = product('0123456789', repeat=3)
words = []
for w in a:
    if w[0] != '0' and w[1] == '0' and w[2] != '0':
        words.append(w)
 
# объединяем цифры в одну строку, а затем в число
words = list(map(''.join, words))
words = list(map(int, words))
 
 
### ПОМЕСТИТЬ В ЦИКЛ 2..81
 
# Выбираем двойки чисел и перебираем суммы двоек
a = permutations(words, r = 2)
a = list(a)
 
for i in range(len(a)):
    if a[i][0] + a[i][1] == s:
        print('2')
 
print('no')
Прошу помощи в организации перебора двоек чисел, затем троек и так далее.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2023, 16:48
Ответы с готовыми решениями:

Задача по теории чисел
Всех приветствую. Задача (прошу прощения за ссылку): delete Пользоваться можно чем угодно. Всем...

Олимпиадная задача (присутствует немного теории чисел)
Рассмотрим девять чисел , ... , , где ∈ {0, 1, 2}. При этом хотя бы одно число отлично от нуля....

Задача по теории вероятности. Про выбор различных чисел k из последовательности
Задача №1 Из последовательности чисел 1,2…n выбирают k различных чисел. Какова вероятность: a)...

Задача с вложенными циклами и динамическим программированием
Добрый день!Программы на языке 'C'. Такой вопрос,почему данная программа не высчитывает ответ по...

Задача про распил бруса НЕ динамическим программированием
Задача про распил брусьев сформулирована следующим образом: "Вам нужно распилить деревянный брус...

9
5425 / 2778 / 561
Регистрация: 07.11.2019
Сообщений: 4,549
15.01.2023, 17:31 2
Escim0, надо не с двоек начинать.. по моим оценкам, минимальное количество чисел: 13, максимальное 113 (56, но это не точно).
Сумма цифр в разрядах сотен в этих чисел: 225, в разрядах единиц: 112.
S = 11425, а P = 22612 - возможно, т.к. их сумма делится нацело на 101, а разность на 99, если бы это не соблюдалось, то точно было бы нельзя.
2
Эксперт Python
8778 / 4433 / 1858
Регистрация: 27.03.2020
Сообщений: 7,268
15.01.2023, 17:54 3
Escim0,
Python
1
2
3
4
5
6
7
print(27*804 + 904)
print(27*408 + 409)
print((22612 - 11425)%99 == 0)
 
print(901//109)
 
print(29997*(901//109))
Все таки «по математике»…
4
3 / 3 / 0
Регистрация: 16.02.2019
Сообщений: 23
15.01.2023, 22:40  [ТС] 4
u235,
Действительно, чисел выбрано не менее 13
Почему сумма должна быть кратна 101, а разность - 99?
0
5425 / 2778 / 561
Регистрация: 07.11.2019
Сообщений: 4,549
15.01.2023, 22:52 5
Escim0, Потому что исходные числа можно записать ai0bi, т.е. 100*ai+bi, а перевернутые числа будут: 100*bi+ai
Тогда сумма будет:
101*(ai+bi), разность 99*(ai-bi)
1
3 / 3 / 0
Регистрация: 16.02.2019
Сообщений: 23
15.01.2023, 23:01  [ТС] 6
Gdez,
Понятно все, кроме происхождения первых двух строк кода.
0
Эксперт Python
8778 / 4433 / 1858
Регистрация: 27.03.2020
Сообщений: 7,268
16.01.2023, 04:16 7
Escim0, «Выбор» количества и значений пар трехзначных чисел, удовлетворяющих условию.
Вообще все пары не симметричных чисел можно найти в том числе с помощью расширенного алгоритма Евклида:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def gcd_ext(a, b):
    if b == 0:
        return a, 1, 0
    d, x, y = gcd_ext(b, a % b)
    x, y = y, x - (a//b) * y
    return d, x, y
 
 
diff = [i*99 for i in range(8,0,-1)]
pi = [[900 + i - 101*j for j in range(i)] for i in range(1, 9)]
 
p = 22612
s = 11425
c = p - s
for i in range(7):
    a = diff[i]
    for j in range(i+1, 8):
        b = diff[j]
        d, x, y = gcd_ext(a, b)
 
        if c % d == 0:
            k = c//d
            t = k*x // (b//d)
            x = k*x - (b//d) * t
 
            while x <= 0 :
                x = k*x + b//d
            y = (c - a*x) // b
            if y > 0:
                for ei in pi[i]:
                    for ej in pi[j]:
                        if ei*x + ej*y == p:
                            print((ei, x), (ej, y), ei*x + ej*y)
                            ei = int(str(ei)[::-1])
                            ej = int(str(ej)[::-1])
                            print((ei, x), (ej, y), ei*x + ej*y)
                            print()
1
3 / 3 / 0
Регистрация: 16.02.2019
Сообщений: 23
16.01.2023, 20:31  [ТС] 8
Gdez,
Мне кажется, нельзя просто поделить нацело, должно быть целое число
0
Эксперт Python
8778 / 4433 / 1858
Регистрация: 27.03.2020
Сообщений: 7,268
16.01.2023, 20:46 9
Escim0, здесь только целочисленное деление «//«
0
3 / 3 / 0
Регистрация: 16.02.2019
Сообщений: 23
17.01.2023, 11:16  [ТС] 10
Gdez, так 901 на 109 не делится нацело
0
17.01.2023, 11:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2023, 11:16
Помогаю со студенческими работами здесь

С программированием совсем туго.А задача такого типа:
Создать текстовый файл. Вывести его на экран. Поменять местами первое и последнее слово.

Задача по теории
i:=2; for i:=3 to i*i mod 35 do write(i,' '); Что выдаст программа ? Выдает 3_4_. Почему не...

задача по теории
Как это решить ? В каждой из двух урн по A белых и B чёрных шаров. Из первой урны во вторую...

Задача по теории вероятности
Случайная величина X задана функцией распределения F(x). Найти: плотность распределения...

Задача теории вероятностей
При данном технологическом процессе 83% всех сходящих с конвейера автозавода автомобилей – цвета...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru