Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для Elliot_Alderson
93 / 11 / 7
Регистрация: 14.06.2020
Сообщений: 52

Проект Эйлера, прыгающие числа

29.07.2020, 18:48. Показов 2663. Ответов 5

Студворк — интернет-сервис помощи студентам
Прыгучие числа

Если, читая число слева направо, ни одна цифра не превышает цифру справа от нее, то такое число называется возрастающим; например, 134468.

Таким же образом, если ни одна цифра не превышает цифру слева от нее, число называется убывающим; например, 66420.

Назовем положительное целое число, не являющееся ни убывающим, ни возрастающим, "прыгучим" числом; например, 155349.

Очевидно, не существует прыгучих чисел меньше ста, однако больше половины чисел до одной тысячи (525) являются прыгучими. Вообще, первое число, пропорция прыгучих чисел до которого достигает 50% - это 538.

Удивительно, но далее прыгучие числа становятся все более и более распространенными, и когда мы достигнем 21780, пропорция прыгучих чисел будет равна 90%.

Найдите наименьшее число, пропорция прыгучих чисел до которого составляет ровно 99%.
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
import time
start_time = time.time()
m = 0     #Процент
s = 0      #Кол-во прыгучих
i = 100   #Текущее число
increase = False
decrease = False
 
while m != 99:
    i += 1
    i = str (i)
    for j in range (len (i)-1):
        if int(i[j+1]) > int (i[j]):
            increase = True
        elif int(i[j+1]) < int (i[j]):
            decrease = True
        if decrease == True and increase == True:
            s += 1
            break
    i = int (i)
    m = (float (s)/ i) * 100
    increase = False
    decrease = False
 
print (i)
print ("\n", "--- %s sec ---" % (time.time()-start_time))
Мое решение, оно слишком медленное (15,6 секунд). Может можно сделать как-нибудь быстрее? Заранее спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2020, 18:48
Ответы с готовыми решениями:

Проект Эйлера
Я только недавно начал учить питон(это мой первый язык программирования), я пробовал свои силы в проекте Эйлера, первую задачу более менее...

Проект Эйлера задача 18
Нужно начиная в вершине треугольника и перемещаясь вниз на смежные числа,так максимальная сумма до основания составляет 23. 3 7 4 2 4...

Проект Эйлера задача 15
Начиная в левом верхнем углу сетки 2×2 и имея возможность двигаться только вниз или вправо, существует ровно 6 маршрутов до правого нижнего...

5
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
29.07.2020, 20:20
Можно число разложить на цифры. И считать только(!) те, у которых минимум занимает первую позицию и максимум последнюю; плюс наоборот максимум первая позиция, минимум последняя. При достижении 1% стоп
Python
1
while n > 1:
Добавлено через 1 час 3 минуты
Извиняюсь, ошибся(((
1
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
29.07.2020, 22:18
Вот так будет чуть быстрее:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import time
def is_spring(num):
    s=list(str(num))
    return s!=sorted(s) and s!=sorted(s, reverse=True)
    
start_time = time.time()
m = 0     #Процент
s = 0      #Кол-во прыгучих
i = 100   #Текущее число
while m != 99:
    i += 1
    if is_spring(i):
        s+=1
        m=s*100/i
    
print (i)
print ("\n", "--- %s sec ---" % (time.time()-start_time))
2
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
29.07.2020, 22:30
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
i = 21780
k = 19601
while True :
    a = list(map(int,str(i)))
    a.sort()
    num1 = int(''.join(map(str,a)))
    num2 = int(''.join(map(str, a[::-1])))
    if i != num1 or i != num2 :
        k += 1
    n = k/i
    #print(n)
    if n >= 0.99:
        break
    i += 1
print(i)
По условию задачи для 90% есть данные)
1
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
30.07.2020, 00:35
Лучший ответ Сообщение было отмечено Elliot_Alderson как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
s = 0
i = 100
while s*100/i < 99:
    f1 = f2 = False  # increase, decrease
    i += 1
    d = str(i)
    for a, b in zip(d, d[1::]):
        f1 |= a > b
        f2 |= a < b
        if f1 and f2:
            s += 1
            break
print(i)
1
 Аватар для Elliot_Alderson
93 / 11 / 7
Регистрация: 14.06.2020
Сообщений: 52
30.07.2020, 17:49  [ТС]
Спасибо всем!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.07.2020, 17:49
Помогаю со студенческими работами здесь

Проект Эйлера. Задача 5
День добрый! Решаю пятую задачу Проекта Эйлера: &quot;2520 - самое маленькое число, которое делится без остатка на все числа от 1 до...

Проект Эйлера задача 18, оптимизация
Решил задачу Эйлера # № 18 через brute force, теперь хочу её уменьшить рекурсией но не могу понять как это можно сделать! Только затронул...

Проект Эйлера: Наибольшее произведение в последовательности
Добрый вечер всем, решал задачу из проекта Эйлера, вот условие: https://euler.jakumo.org/problems/view/8.html Так как число, слишком...

Проект Эйлера Задача 11, работа с таблицами вроде как:)
Привет, я новенький в питоне, наткнулся на проект Эйлера, задача номер 11(https://euler.jakumo.org/problems/view/11.html) все вроде как...

Проект Эйлера, задача №7. Какое число является 10001-ым простым числом?
Доброго времени суток. Я начинающий питонер\питонист\питонщик\ набрасал такой вот кодец. Прошу вашего мнения. Может кому пригодится. За...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru