Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 20.02.2024
Сообщений: 2

Пилообразные числа

20.02.2024, 15:27. Показов 2068. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Число
X
X является пилообразным, если числа, стоящие на четных позициях, строго больше своих соседей, а числа, стоящие на нечетных позициях, строго меньше своих соседей. Например числа 9, 45, 38, 121, 19283746564738291 являются пилообразными. А числа 55, 435, 19289 не являются пилообразными. В числе 435 цифра 3 стоит на четной позиции и не строго больше своих соседей, а в числе 19289 цифра 8 стоит на четной позиции, но соседняя цифра 9 больше.

Найдите количество пилообразных чисел
X
X, для которых верно N1 <= X <= N2

Формат ввода
В первой строке вводится одно число N1: (1 <= N1 <= 10^100000)
​Во второй строке вводится одно число N2: (1 <= N2 <= 10^100000)

Формат вывода
Выведите одно число - количество пилообразных чисел X, для которых верно N1 <= X <= N2. Так как это число может быть большим, выведите ответ по модулю 10^9 + 7

Пример 1
Ввод
22
33
Вывод
7

Пример 2
Ввод
22
34
Вывод
8

Пример 3
Ввод
100
2
Вывод
0

Пример 4
Ввод
56
58
Вывод
3

Пример 5
Ввод
23
456
Вывод
158

Помогите доработать код или написать его с нуля
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2024, 15:27
Ответы с готовыми решениями:

Пилообразные последовательности
Назовем последовательность a1, a2, ..., an пилообразной, если выполняется такое условие a1&lt;a2&gt;a3&lt;a4...... То есть для каждого...

Сгенерировать все пилообразные кортежи длины К над алфавитом {0,1}
Пилообразный кортеж - кортеж в котором a&lt;=a &gt;= a, i = 1,k Вариант сгенерировать все последовательности из 0 и 1 и по ходу проверять их...

Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми
Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми. ...

10
0 / 0 / 0
Регистрация: 20.02.2024
Сообщений: 4
20.02.2024, 16:22
Не проходит 5 тест:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
n1 = int(input())
n2 = int(input())
kol = 0
x = 0
for i in range(n1, n2 + 1):
  s = str(i)
  for j in range(0, len(s)-1, 2):
    if j != len(s)-1:
      if len(s) % 2 == 0:
        if int(s[j]) < int(s[j+1]):
          x = True
        else:
          x = False
      elif len(s) == 1:
        x = True
      else:
        if int(s[j+2]) < int(s[j]) < int(s[j+1]):
          x = True
        else:
          x = False
  if x:
    kol += 1
print(kol)


помогите пж
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
20.02.2024, 17:43
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def  is_sawtooth(n):
    ns = str(n)
    for i in range(1,len(ns)):
        if i%2:
            if not ns[i-1] < ns[i]:
                return False
        else:
            if not ns[i-1] > ns[i]:
                return False
    return True
 
L = int(input('L = '))
R = int(input('R = '))
print(len([x for x in range(L, R+1) if is_sawtooth(x)]))
Ну или так:
Python
1
2
3
4
5
6
7
8
9
10
11
from operator import lt,gt
def  is_sawtooth(n):
    ns = str(n)
    for i in range(1,len(ns)):
        if not [gt,lt][i%2](ns[i-1], ns[i]):
            return False
    return True
 
L = int(input('L = '))
R = int(input('R = '))
print(len([x for x in range(L, R+1) if is_sawtooth(x)]))
3
1 / 1 / 0
Регистрация: 20.02.2024
Сообщений: 2
25.02.2024, 18:56  [ТС]
Не проходит ни один из тестов
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
25.02.2024, 19:25
Цитата Сообщение от yuniy Посмотреть сообщение
Не проходит ни один из тестов
А подсказки в инпутах убирали?
0
1 / 0 / 1
Регистрация: 22.05.2022
Сообщений: 27
26.02.2024, 15:02
тут ограничения большие. нужна динамика по колличеству символов. вот мой код работающий для n1 и n2 равных 10^x.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
s1, s2 = input().split()
n1, n2 = len(s1), len(s2) - 1
dp = [[0]*10 for _ in range(n2)]
dp[0] = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
 
for i in range(1, n2):
    if (i + 1) % 2 == 1:
        for j in range(10):
            for ii in range(j + 1, 10):
                dp[i][j] += dp[i - 1][ii]
    else:
        for j in range(10):
            for ii in range(j):
                dp[i][j] += dp[i - 1][ii]
 
ans = 0
for i in range(n1 - 1, n2):
    for j in dp[i]:
        ans += j
 
print(ans)
но тут еще условия для границ нужно прописать, и мне лень
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
26.02.2024, 17:34
Gumballcom, так у вас кубическая сложность циклов, а здесь достаточно линейной.
0
1 / 0 / 1
Регистрация: 22.05.2022
Сообщений: 27
26.02.2024, 17:39
три вложенных цикла ≠ кубическая сложность. ассимтотика моего кода O(n). циклы лишь сокращают запись. const*n=O(n).
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
27.02.2024, 17:38
Цитата Сообщение от Gumballcom Посмотреть сообщение
но тут еще условия для границ нужно прописать, и мне лень
этож самое сложное..
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
38
39
40
from itertools import accumulate as acc
def f(x:str, inclusive:bool=True, base:int=10):
    # число пилообразных чисел (aAaAaA...) до x включительно(inclusive) в СС base
    # пусть n - номер итерации
    # s - сколько aAaA.. чисел длины < n, включая лидирующий ноль, 1 10 46 286 1696 10318 (base=10)
    # f[k] - сколько aAaA.. или AaAa.. (в зависимости от чётности n) чисел длины n, начинающихся с цифры k
    # r - сколько aAaA.. чисел, у которых префикс совпадает с x
    # t - тест на пилообразность x
    x = [*map(int, x.lstrip('0') or '0')]
    f, r, s, t = [1]*base, 1, 1, 1
    for i in range(len(x)-2, -1, -1):
        if i % 2: # Aa
            s += sum(f[1:])
            if x[i] <= x[i+1]: r,t = 0,0
            r += sum(f[0:min(x[i],x[i+1])])
            f = [0, *acc(f)][:-1]
        else: # aA
            s += sum(f[:-1])
            if x[i] >= x[i+1]: r,t = 0,0
            r += sum(f[x[i]+1:x[i+1]])
            f = [0, *acc(f[:0:-1])][::-1]
 
    return s + r + sum(f[1:x[0]]) - (1-int(inclusive))*t - int(x==[0])
 
def g(N1: str, N2:str):
    return max(0, f(N2) - f(N1, inclusive=False))
 
print(g('22', '33'))    # 7
print(g('22', '34'))    # 8
print(g('100', '2'))    # 0
print(g('56', '58'))    # 3
print(g('23', '456'))   # 158
 
print(f('000'))         # 1
print(f('000', False))  # 0
print(f('006'))         # 7
print(f('006', False))  # 6
print(f('9'*100))
print(f('9'*1000))
print('done!')
1
1 / 0 / 1
Регистрация: 22.05.2022
Сообщений: 27
27.02.2024, 18:20
только нужно выводить остаток ответа по модулю 10^9+7)
0
0 / 0 / 0
Регистрация: 25.02.2024
Сообщений: 4
29.02.2024, 15:18
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
n1 = int(input('Введите одно число N1: '))
n2 = int(input('Введите одно число N2: '))
quantity = 0
for num in range(n1, n2 + 1):
    num = str(num)
    n = len(num)
    if n == 1:
        quantity += 1
    if n == 2:
        if num[0] < num[1]:
            quantity += 1
    for i in range(2, n):
        if i % 2 == 0:
            if num[i] < num[i - 1] > num[i - 2]:
                if i == n - 1:
                    quantity += 1
                continue
        else:
            if num[i - 2] > num[i - 1] < num[i]:
                if i == n - 1:
                    quantity += 1
                continue
print(f"Количество пилообразных чисел в промежутке N1 и N2: {quantity}")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.02.2024, 15:18
Помогаю со студенческими работами здесь

Вывести все чётные числа, начиная с числа N и до числа M. Числа N и M задает пользователь
Вывести все чётные числа, начиная с числа N и до числа M. Числа N и M задает пользователь.

Вывести все чётные числа, начиная с числа N и до числа M. Числа N и M задает пользователь
Вывести все чётные числа, начиная с числа N и до числа M. Числа N и M задает пользователь. С++

Числа близнецы, дружественные числа, пифагоровы числа и числа Армстронга
Здравствуйте, помогите написать программу где в заданном диапазоне программа находит: числа близнецы, дружественные числа, пифагоровы числа...

Числа близнецы, дружественные числа, пифагоровы числа и числа амстронга
Здравствуйте, помогите написать программу где в заданном диапазоне программа находит: числа близнецы, дружественные числа, пифагоровы числа...

Получить из цифр числа четырехзначные числа, у которых цифры исходного числа идут в том же порядке
Задано натуральное трехзначное число. Получить из его цифр четырехзначные числа, у которых цифры исходного числа идут в том же порядке, но...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru