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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - 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