Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Вот задача:
"Петя перешёл в другую школу. На уроке физкультуры ему понадобилось определить своё место в строю. Помогите ему это сделать.
Программа получает на вход невозрастающую последовательность натуральных чисел, означающих рост каждого человека в строю. После этого вводится число 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 в 22:50.
Артем Ветик вне форума   Ответить с цитированием
Старый 02.09.2016, 20:50   #2
Sasha2401
Новичок
 
Регистрация: 02.09.2016
Сообщений: 2
Репутация: 10
По умолчанию Решение

Как исправить Ваш код я не нашел, но задачку решил. Возможно код не элегантен, но работает.
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, 21:44   #3
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,475
Репутация: 885
По умолчанию

Python поддерживает метод .Sort
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 02.09.2016, 22:52   #4
Sasha2401
Новичок
 
Регистрация: 02.09.2016
Сообщений: 2
Репутация: 10
По умолчанию

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

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

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

[OFFTOP]
Serge_Bliznykov, да ладно , можно подумать в других топиках дискус идет только строго по теме задания. Вот нам захотелось повыделываться что такие умные и знаем про сортировку и миниЗащиту от дурака. Не судите строго.
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 20.09.2016, 22:28   #7
New man
Участник клуба
 
Регистрация: 24.01.2011
Сообщений: 756
Репутация: 241
По умолчанию

Самое простое решение вот:
Код:

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)


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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задано прямоугольную матрицу отсортировать методом выбора так, чтобы последовательность элементов была такой, как показано на схем kaktus12061998 Помощь студентам 4 28.01.2016 11:10
Даны две последовательности.Образовать из них новую последовательность чисел так, чтобы она тоже была неубывающей. OlgaRostov Общие вопросы .NET 2 09.12.2015 19: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


04:45.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru