Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 26.09.2018
Сообщений: 5
1

Программа не проходит тесты

26.09.2018, 18:13. Показов 1894. Ответов 9
Метки нет (Все метки)

Здравствуйте, решаю задачу:
Имеется список людей с указанием их фамилии, имени и даты рождения. Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять самого старшего человека из этого списка и выводить его фамилию и имя и дату рождения, а если имеется несколько самых старших людей с одинаковой датой рождения, то определять их количество.

Входные данные
На вход программе в первой строке подается количество людей в списке N. В каждой из последующих N строк находится информация в следующем формате: <Фамилия> <Имя> <Дата рождения>, где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Имя> – строка, состоящая не более, чем из 20 символов без пробелов, <Дата рождения> – строка, имеющая вид ДД.ММ.ГГГГ, где ДД – двузначное число от 01 до 31, ММ – двузначное число от 01 до 12, ГГГГ – четырехзначное число от 1800 до 2100.

Выходные данные
Программа должна вывести фамилию и имя самого старшего человека в списке и его дату рождения. Если таких людей, несколько, то программа должна вывести их количество.

Примеры
входные данные
3
Ivan Ivanov 01.10.1995
Lena Ivanovna 04.10.1999
Kolya Chernov 10.10.2010
выходные данные
Ivan Ivanov 01.10.1995
входные данные
3
Ivan Ivanov 03.10.1997
Lena Ivanovna 03.10.1997
Kolya Chernov 03.10.1997
выходные данные
3
Написал следущий код:
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
27
import datetime
 
min_d = datetime.date(datetime.MAXYEAR, 12, 31)
counter = 0
 
n = int(input())
povt =0
name_older = 0
for _ in range(n):
 input_ = input()
 birthday_str = input_.split()[-1]
 birthday = datetime.datetime.strptime(birthday_str, '%d.%m.%Y').date()
 if  birthday == min_d:
  counter += 1
 elif birthday < min_d:
  counter = 1
  min_d = birthday
  name_older = input_
 else:
  if name_older ==0:
   counter = 1
   min_d = birthday
   name_older = input_
if counter == 1:
 print(name_older) 
else:
 print(int(counter))
Но программа не проходит большинство тестов.
Что мне нужно изменить?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2018, 18:13
Ответы с готовыми решениями:

Программа не проходит некоторые тесты
Доброго времени суток, друзья! Решаю задачу: вывод стандартный вывод Дана строка, состоящая...

Программа не проходит по времени
http://codeforces.com/problemset/problem/591/B - сама задача Я перепробовал много...

Программа с процедурами не проходит тесты
Добрый день Пишу сюда, так как не могу найти ошибку самостоятельно. Код программы с...

Программа не проходит определённые тесты
Вот такой вот вышел код для данной задачи но он почему-то не проходит выше второй группы хотя если...

9
3 / 2 / 2
Регистрация: 16.03.2015
Сообщений: 188
26.09.2018, 18:32 2
Не пойму в чем проблема закидать код уже с разметкой ?
Как бы есть разметка для Python!
0
18 / 14 / 5
Регистрация: 20.09.2018
Сообщений: 51
Записей в блоге: 1
26.09.2018, 21:33 3
Лучший ответ Сообщение было отмечено X_Voin_X как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
n = int(input())
m = '99999999'
z = 1
for i in range(0, n) :
    q = input()
    q = q.split()
    x = q[2].split('.')
    x = x[2]+x[1]+x[0]
    if x < m :
        m = x
        mq = q
        z = 1
    elif x == m:
        z = z + 1
 
if z > 1 :
    print(z)
else :
    print(mq[0]+' '+mq[1]+' '+mq[2])
код кривой, но быстрый

сириус решаешь)

Добавлено через 1 час 7 минут
зачем ты используешь datetime?

Добавлено через 1 минуту
Python
1
2
3
input_ = input()
 birthday_str = input_.split()[-1]
 birthday = datetime.datetime.strptime(birthday_str, '%d.%m.%Y').date()
Python
1
2
3
4
5
 
q = input()
q = q.split()
x = q[2].split('.')
x = x[2]+x[1]+x[0]
так быстрее и правельнее

Добавлено через 8 минут
Python
1
2
3
4
5
else :
        if name_older ==0:
            counter = 1
            min_d = birthday
            name_older = input_
а это зачем, по условию хотя бы 1 должен быть

Добавлено через 3 минуты
всё ясно, я понял в чём у тебя ошибка

скажи : 12 > 1999999 , что будет. ответ: True

а теперь скажи : '12' > '1999999' , True? нет ты не угадал ответ: False

Добавлено через 1 минуту
Python
1
if  birthday == min_d:
у тебя сравниваются строки, и поэтому ответ неверный

Добавлено через 7 минут
Python
1
if  list(map(lambda x: int(x),str(birthday).split('-'))) == list(map(lambda x: int(x),str(min_d).split('-'))):
если так сравнивать, то ответ должен быть верным, тебе всего 2 строки надо изменить
1
0 / 0 / 0
Регистрация: 26.09.2018
Сообщений: 5
26.09.2018, 22:05  [ТС] 4
Цитата Сообщение от hashell Посмотреть сообщение
Python
1
2
3
4
5
else :
    if name_older ==0:
    counter = 1
    min_d = birthday
    name_older = input_
а это зачем, по условию хотя бы 1 должен быть
Да, я понял, это не нужно

Добавлено через 3 минуты
Цитата Сообщение от hashell Посмотреть сообщение
Python
1
if *list(map(lambda x: int(x),str(birthday).split('-'))) == list(map(lambda x: int(x),str(min_d).split('-'))):
если так сравнивать, то ответ должен быть верным, тебе всего 2 строки надо изменить
Все равно частичное решение
0
18 / 14 / 5
Регистрация: 20.09.2018
Сообщений: 51
Записей в блоге: 1
26.09.2018, 22:53 5
я завтра посмотрю, может ещё где ошибка, но код который я прислал полностью рабочий
0
0 / 0 / 0
Регистрация: 26.09.2018
Сообщений: 5
26.09.2018, 22:54  [ТС] 6
Да, я проверил твой код, спасибо огромное
0
18 / 14 / 5
Регистрация: 20.09.2018
Сообщений: 51
Записей в блоге: 1
26.09.2018, 22:55 7
вводи данные в мой код и свой, и когда будет разница найдёшь ошибку, останется понять в чём причина
0
0 / 0 / 0
Регистрация: 26.09.2018
Сообщений: 5
26.09.2018, 22:56  [ТС] 8
Попробую
0
18 / 14 / 5
Регистрация: 20.09.2018
Сообщений: 51
Записей в блоге: 1
26.09.2018, 23:00 9
в питоне, если не ошибаюсь должна быть отладка, с ней будет легко найти ошибку

но я всегда использовал print)

завтра я исправлю твой код
0
0 / 0 / 0
Регистрация: 26.09.2018
Сообщений: 5
26.09.2018, 23:05  [ТС] 10
Вообще я с телефона, поэтому тоже print использую
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2018, 23:05

Программа не проходит все тесты на тестовой системе
Дано число K. Дальше следуют K блоков. В каждом блоке есть 4 числа a,b и c,d . Числа натуральные и...

Программа не проходит тесты по времени, посоветуйте как исправить
Добрый день, не могли бы вы подсказать по задаче. Имеется круг с целыми числами от 1 до n. Числа...

Не проходит тесты
Программа не проходит почему-то тесты, хотя вроде работает, подскажите пожалуйста на счёт EOF, мне...

Не проходит все тесты
#include &lt;iostream&gt; #include &lt;cmath&gt; int main() { long long m, n; std::cin &gt;&gt; m &gt;&gt; n; ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.