Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2016, 18:46   #1
Артем Ветик
Пользователь
 
Регистрация: 20.07.2016
Сообщений: 18
По умолчанию Найти позицию для вставки натурального значения (рост) в невозрастающую последовательность (шеренгу учеников) так, чтобы сортировка не нарушилась

Вот задача:
"Петя перешёл в другую школу. На уроке физкультуры ему понадобилось определить своё место в строю. Помогите ему это сделать.
Программа получает на вход невозрастающую последовательность натуральных чисел, означающих рост каждого человека в строю. После этого вводится число X – рост Пети. Все числа во входных данных натуральные и не превышают 200.
Выведите номер, под которым Петя должен встать в строй. Если в строю есть люди с одинаковым ростом, таким же, как у Пети, то он должен встать после них."
Например:
входные данные:
150 146 130 100
130
Выходные данные:
4

Код:
s=[int(s)for s in input().split()]
boy=int(input())
num=0
for i in range(0,len(s)-1):
    if s[i]>=boy>s[i+1]:
        num=i+1
    if boy<=s[len(s)-1]:
        num=len(s)
print(num+1)
Ошибка в следующем:
Входные данные:
1
1
Выходные данные
1 (а должно быть 2)

P.s. не судите строго, только недавно начал изучать питон)

Последний раз редактировалось Артем Ветик; 21.07.2016 в 21:50.
Артем Ветик вне форума Ответить с цитированием
Старый 02.09.2016, 19:50   #2
Sasha2401
Новичок
Джуниор
 
Регистрация: 02.09.2016
Сообщений: 2
По умолчанию Решение

Как исправить Ваш код я не нашел, но задачку решил. Возможно код не элегантен, но работает.
PHP код:
s=[int(z) for z in input().split()]
boy=int(input())
num=0
# добовляем боя в список
s.append(boy)
# сортируем список по возврастанию
for i in range(0,len(s)-1):
    for 
z in range(i+1,len(s)):
        if 
s[i]>s[z]:
            
temp=s[i]
            
s[i]=s[z]
            
s[z]=temp

# ищим боя в списке  
for i in range(0,len(s)):
    if 
s[i]==boy:
        
num=i+# даже если будет 10 человек с одинаковым ростом покажет последнего
#
    
if boy<s[0]: # вдруг бой самый низкий
        
num=1
#
print(s)  # ведено для наглядности можно убрать
print(num
Sasha2401 вне форума Ответить с цитированием
Старый 02.09.2016, 20:44   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Python поддерживает метод .Sort
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 02.09.2016, 21:52   #4
Sasha2401
Новичок
Джуниор
 
Регистрация: 02.09.2016
Сообщений: 2
По умолчанию

Согласен, одной строкой можно, да наверно и нужно было
PHP код:
s.sort() 
. Надо было порыться и найти этот метод.
Думаю что сам метод sort реализован подобно.
Sasha2401 вне форума Ответить с цитированием
Старый 02.09.2016, 23:53   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

робяты, какая сортировка?

исходная последовательность чисел уже дана ОТСОРТИРОВАННО по невозрастанию:
Цитата:
Программа получает на вход невозрастающую последовательность натуральных чисел
Так что, сортировать ничего не надо.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.09.2016, 10:44   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

[OFFTOP]
Serge_Bliznykov, да ладно , можно подумать в других топиках дискус идет только строго по теме задания. Вот нам захотелось повыделываться что такие умные и знаем про сортировку и миниЗащиту от дурака. Не судите строго.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 20.09.2016, 21:28   #7
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Самое простое решение вот:
Код:
s = [x for x in s if x<=boy] + [boy] + [x for x in s if x>boy]
Оптимальное вот:
Код:
import bisect
pos = bisect.bisect_right(s,boy)
s.insert(pos,boy)
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 20.09.2016 в 21:32.
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задано прямоугольную матрицу отсортировать методом выбора так, чтобы последовательность элементов была такой, как показано на схем kaktus12061998 Помощь студентам 4 28.01.2016 10:10
Даны две последовательности.Образовать из них новую последовательность чисел так, чтобы она тоже была неубывающей. OlgaRostov Общие вопросы .NET 2 09.12.2015 18:43
Для натурального числа N определить сколько раз его цифры образуют последовательность 10. vikyxa Помощь студентам 0 25.09.2013 16:42
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения из списка B. xaoc2 Свободное общение 1 12.06.2011 23:26
как написать так, чтобы формула забирала значения переменных? peq Microsoft Office Excel 2 22.10.2010 13:47