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

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

29.07.2020, 18:48. Показов 2585. Ответов 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
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
29.07.2020, 20:20
Можно число разложить на цифры. И считать только(!) те, у которых минимум занимает первую позицию и максимум последнюю; плюс наоборот максимум первая позиция, минимум последняя. При достижении 1% стоп
Python
1
while n > 1:
Добавлено через 1 час 3 минуты
Извиняюсь, ошибся(((
1
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,757
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
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
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
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru