生日相同 (日期在前,多個名字跟在後面)

2021-09-05 09:15:12 字數 1520 閱讀 7553

n = int(input())

# --------- 把輸入的學生資訊用列表儲存

studen_list =

for i in range(n):

temp = input().split()

for i in range(n):

studen_list[i][1] = int(studen_list[i][1])

studen_list[i][2] = int(studen_list[i][2])

# --------- 把月份和日期都轉換為0102這樣的格式,為了下面做鋪墊

for i in range(n):

if studen_list[i][1] < 10:

studen_list[i][1] = '0' + str(studen_list[i][1])

if studen_list[i][2] < 10:

studen_list[i][2] = '0' + str(studen_list[i][2])

# --------- 把學生的資訊用字典儲存,以生日為 key ,姓名為 value

studen_dict = {}

for i in range(n):

day = str(studen_list[i][1]) + str(studen_list[i][2])

if day in studen_dict:

studen_dict[day] += studen_list[i][0] + ','

else:

studen_dict[day] = studen_list[i][0] + ','

# --------- 排序,按照日期從小到達進行排序

a = sorted(studen_dict.items(), key=lambda x: x[0])

#print(a)

# --------- 輸出有生日相同的學生資訊

count = 0

for i in range(len(a)):

temp1 = a[i][1].split(',') # 以逗號分隔姓名,temp1 的型別為列表

temp1.remove('')

# 對學生的姓名進行排序先按名字從短到長排,在長度相同的情況按字典順序排

temp1.sort(key=lambda x: (len(x), x))

temp = ''

if len(temp1) > 1:

for v in temp1:

temp += v + " "

# a[i][0] 的型別是字串;a[i][0][0:2]是取出字串 a[i][0] 中的前兩位

print(str(int(a[i][0][0:2])) + ' ' + str(int(a[i][0][2:4])) + ' ' + temp)

else:

count += 1

if count == n:

print('none')

生日相同(結構體)

描述 在乙個有180人的大班級中,存在兩個人生日相同的概率非常大,現給出每個學生的學號,出生月日。試找出所有生日相同的學生。輸入第一行為整數n,表示有n個學生,n 100。此後每行包含乙個字串和兩個整數,分別表示學生的學號 字串長度小於10 和出生月 1 m 12 日 1 d 31 學號 月 日之間...

生日相同(結構體)

描述 在乙個有180人的大班級中,存在兩個人生日相同的概率非常大,現給出每個學生的學號,出生月日。試找出所有生日相同的學生。輸入 第一行為整數n,表示有n個學生,n 100。此後每行包含乙個字串和兩個整數,分別表示學生的學號 字串長度小於10 和出生月 1 m 12 日 1 d 31 學號 月 日之...

2724 生日相同

兩個問題 1 多組輸入 記得用while迴圈 2 根據輸入時間進行排序 總時間限制 1000ms 記憶體限制 65536kb 描述在乙個有180人的大班級中,存在兩個人生日相同的概率非常大,現給出每個學生的學號,出生月日。試找出所有生日相同的學生。輸入第一行為整數n,表示有n個學生,n 100。此後...